AngularJS $q Promise サンプル07

var app = angular.module('app', []);
app.controller('Ctrl', function($q, $timeout) {
  function asyncHello(name) {
    var deferred = $q.defer();
    $timeout(function() {
      deferred.notify(name + 'を受け取りました。');
      if(typeof(name) === 'string') {
        deferred.resolve('Hello, ' + name);
      }
      else {
        deferred.reject(name + 'は文字列ではありません。');
      }
    }, 1000);
    return deferred.promise;
  }
  var r = document.getElementById('result');
  var p1 = asyncHello('sato');
  var p2 = asyncHello(326);

  var successCallback = function(msg) {
    r.innerHTML += msg + '
'; }; var errorCallback = function(msg) { r.innerHTML += msg + '
'; }; var notifyCallback = function(msg) { r.innerHTML += msg + '
'; }; var finallyCallback = function(msg) { r.innerHTML += 'thenの処理が完了しました。
'; }; var p1End = p1 .then(successCallback, errorCallback, notifyCallback) .finally(finallyCallback); var p2End = p2.then(successCallback, errorCallback, notifyCallback); $q.all([p1End, p2End]).then( function() { r.innerHTML += 'p1とp2の処理が完了しました。'; } ); });