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の処理が完了しました。';
}
);
});