var iWantResolve = true;//没有实际意思,测试运行resolve或reject function promise1() { return $q(function (resolve, reject) { $timeout(function () { if (iWantResolve) { resolve("promise1 resolved"); } else { reject("promise1 reject"); } }, 1000) }) } promise1() .then(function (s1) {//success callback console.log(s1); }) .catch(function (err1) {//error callback console.log(err1); }); function promise2() { var deferred = $q.defer(); $timeout(function () { deferred.notify("promise2 notify"); if (iWantResolve) { deferred.resolve("promise2 resolved"); } else { deferred.reject("promise2 reject"); } }, 500); return deferred.promise; } promise2() .then(function (s2) { console.log(s2); }, function (err2) { console.log(err2); }); $q.all([promise1(), promise2()]) .then(function (dataArr) { //promise都成功执行后的回调函数 console.log("$q.all: ", dataArr); }, function (err) { console.log("$q.all: ", err) });
像这个例子,每个promise回调都打印了返回值,那么可以用$q.all()处理在其回调打印dataArr,则包含了所有promise返回值!
jquery和angular的deferred用法大致相同,但有两处要注意的地方:
jquery:
defer=$.Deferred(); defer.promise();
angular:
var deferred=$q.defer(); deferred.promise;
总结
以上便是我对angular的$q、deferred、promise的一些浅显的理解,希望对大家的学习或者能有所帮助,如果有疑问大家可以留言交流。望各位大神多多评论、指教……
最后附上:
jquery中文网的deferred介绍:
一位大神对jquery的deferred的总结!
阮一峰:
您可能感兴趣的文章: