我有一个函数foo调用另一个函数moreFoo,我想在promises中包装函数调用,以便foo返回的promise在moreFoo解析后返回 . 这是我的解决方案:
function foo() {
var defer = $q.defer();
console.log('doing foo');
moreFoo().then(defer.resolve);
return defer.promise;
}
function moreFoo() {
var defer = $q.defer();
setTimeout(function() {
console.log('doing more foo');
defer.resolve();
}, 2000);
return defer.promise;
}
foo().then(function() {
console.log('finished with all foos');
});
然后输出:
做foo
做更多的foo
完成了所有的foos
它似乎按预期工作 . 这是连接这些承诺的正确/最佳方式吗?
3 回答
我不知道"best",但这可以通过利用它返回的承诺
$timeout
来简化很多...我喜欢这种方式($ timeout返回promise):
这个例子显示了两个链接在一起的承诺 . 第二个只在第一个成功后执行 . 如果失败,则调用最后一个错误处理程序 .
可以同时运行,甚至不需要使用
$q.all()
链接它们好参考:https://egghead.io/lessons/angularjs-q-all