<!DOCTYPE html>
<html ng-app="routeResolveExample">

  <head>
    <script data-require="angularjs@1.6.4" data-semver="1.6.2" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.js"></script>
    <script data-require="angular-route@1.6.2" data-semver="1.6.2" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular-route.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

      <body>
        <ng-view></ng-view>
    </body>

</html>
var app = angular.module('routeResolveExample', ['ngRoute']);

/*
// This section doesn't use the resolve property
app.config(function($routeProvider) {
    $routeProvider.when('/', {
        templateUrl: 'greetingTemplate.html',
        controller: 'greetingCtrl'
    });
});

app.controller('greetingCtrl', function($scope, greetingService) {
    // Call service from beginning of controller directly. Route is resolved without waiting for this
    var greetingPromise = greetingService.getGreeting();
    greetingPromise.then(function(greeting) {
        console.log(greeting);
        $scope.answer = "Successful Greeting = "+greeting;
      }, function(failure) {
          $scope.answer = failure;
          console.log("UI failure message");
        });
});
*/


// This section uses resolve property
app.config(function($routeProvider) {
    $routeProvider.when('/', {
      templateUrl: 'greetingTemplate.html',
      controller: 'greetingCtrl',
      // When the resolve property is used in the route, the route will wait to return until all properties of the object are resolved
      // To handle a rejected promise, a then function is needed here. Maybe "route level" logging can be done here
      // as well? Seems like resolve property could have more code in it then I would like
      resolve: {
        greeting: function(greetingService){
            return greetingService.getGreeting().then(function(success) {return success;}, function(failure){
              console.log("Failed");
              return failure;
            });
        }
      }
    });
});

app.controller('greetingCtrl', function($scope, greeting) {
  $scope.answer = greeting;
});


app.service('greetingService', function($q, $timeout) {
     var _this = this;
        _this.getGreeting = function() {
            return $q(function(resolve, reject) {
              $timeout(function() {
              console.log("Inside promise");
                //resolve("Hello from the greetings service");
                reject("Greeting Failed");
            },5000);
            });
        };
}); 

/* Styles go here */

<p>Greeting Below</p>
<p>{{answer}}</p>