【发布时间】:2014-10-03 18:07:57
【问题描述】:
有一个关于在 Angular 中使用 $q 时同步嵌套 Promise 的问题。 下面的代码会确保等待整个 Promise 链吗?这意味着对返回承诺的服务的嵌套调用会在 $q.all 块中等待吗?
var call1 = service1.get('/someUr').then(function(){
return service2.get('/someUrl2'); //returns promise
});
var call2 = service3.get('/someUr').then(function(){
return 'hello';
});
var call3 = service4.get('/someUr').then(function(){
return service3.get('/someUrl3');//returns promise
});
$q.all(call1,call2,call3).then(function(){
console.log('All asynch operations are now completed');
});
基本上:当前代码是否有可能在所有嵌套的 promise 被解析之前执行 $q.all 的 then ?还是递归的?
【问题讨论】:
-
不,我不这么认为。
$q.all()将等待call1、call2和call3在触发then()函数之前一起解析,但不会等待从call1和call3返回的嵌套异步调用。 -
我的印象是它会等待。
-
我目前没有方便的角度环境来测试它,但有了原生承诺,它肯定会等待。 jsfiddle.net/p4evLjm6
-
@KevinB 看起来你是对的。我在下面创建了一个快速的 Angular 测试。
标签: angularjs q angular-promise