【发布时间】:2015-12-15 14:35:43
【问题描述】:
我正在尝试这样做:
- 跑酷1
- 然后在 fun1 返回(promise 解决)后,并行运行 fun2 和 fun3(异步)
- 然后在 fun2, 3 返回(promises resolve)之后,使用不同的输入并行运行一些 fun4
-
然后在所有 fun4 都解决后最终运行 fun5。
$q.all({ fun1: fun1() }).then(function(){ return $q.all({ fun2: fun2(), fun3: fun3(), }); }).then(function(){ var promises = []; for(var i = 0; i < 3; i += 1){ promises.push(fun4(i)); } return $q.all(promises); }).then(function(){ fun5(); });
fun 1~5都是类似这种模式的api调用:
var funX = function(){
return $http({
method: 'GET',
url: '/someURL'
}).success(function(data, status, headers, config) {
return;
}).error(function(data, status, headers, config) {
return new Error();
});
};
我想确保它们按照我上面描述的顺序运行。看起来 fun4 没有等待 fun2 和 fun3 返回,fun5 也没有等待所有 fun4 返回。
【问题讨论】:
-
粗略一瞥看起来还不错。您将
$q.all用于fun1的任何原因? -
如果只是一个承诺,可能不需要所有的东西,但即使我想只有一个承诺,一切都应该工作?
-
我无法重现该问题(使用
$timeout)~plnkr.co/edit/8cFEkMbrc08S1K6vLupi?p=preview。一切似乎都按所需的顺序执行 -
另外,
success和error方法已被弃用 ~ docs.angularjs.org/api/ng/service/$http#deprecation-notice -
我在 v1.4.7 上,我正在监视控制台,看起来不像是因为触发解析的错误。可能是因为我使用的是旧的
success和error。将使用then进行测试。
标签: angularjs promise angular-promise