【发布时间】:2014-02-14 08:14:11
【问题描述】:
如果我有以下功能:
doTask1: function ($scope) {
var defer = $q.defer();
$http.get('/abc')
.success(function (data) {
defer.resolve();
})
.error(function () {
defer.reject();
});
return defer.promise;
},
doTask2: function ($scope) {
var defer = $q.defer();
var x = 99;
return defer.promise;
},
有人告诉我,我可以像这样等待两个承诺:
$q.all([
doTask1($scope),
doTask2($scope)
])
.then(function (results) {
});
如果任务 2 没有返回承诺怎么办?我在 $q 文档中看到 对于 AngularJS,有一个“何时”。但是我不清楚如何使用它 而且没有例子。
是不是我必须让 doTask2 通过两行返回一个承诺:
var defer = q.defer()
return defer.promise
或者有没有更简单的方法来做到这一点?ll
【问题讨论】:
-
如果 doTask2 不返回承诺,为什么需要 $q.all。如果你想等到所有包含的承诺都得到解决,你只需要 $q all 。如果您只想运行同步函数,请在 $q.all 承诺解决后执行。
-
@Geoff - 我以这个为例。我有很多功能,doTask2 或类似的东西只是其中之一。将所有这些函数放在 $q.all 中会使它看起来很清晰,并且很明显它们都需要完成,即使其中一个函数(例如 doTask2 会立即完成)。
标签: javascript angularjs promise