我正在尝试链接一系列任务,它们返回一个promise,在链的最后一个执行并行执行。下面的代码不起作用,我认为你可以传递任何在“then”内返回promise的对象。有没有正确的方法来实现这一点。谢谢。
var startTask = $q.when ( );
startTasks
.then ( validate )
.then ( savePayment )
.then ( refetchPayment )
.then ( saveContactInfo )
.then ( $q.all ( [ updateStatus, submitOrder ] ) )
.then ( successHandler )
.catch ( errorHandler );
答案 0 :(得分:1)
啊哈,$q.all( [ updateStatus, submitOrder] )
总是会返回一个立即解决的承诺。
你想做的事情可能是这样的(猜测)
.then(function(response) {
return $q.all( [ updateStatus(response), submitOrder(response) ] );
});
看到区别?
[updateStatus,submitOrder]
只是一个函数引用数组,在一系列不承诺的事物上调用$q.all
将始终返回一个立即解决的promise。
你需要调用这些函数,因为(我假设)这些函数在被调用时返回promises
。
$q.all
接受一系列promise并返回一个promise,当所有传递到它的promise都被解析时,它会解析。