AngularJS $q:如何将 promise 链接起来,然后在链条的最后进行并行处理?

AngularJS $q: How to chain promises then do parallel last in the chain?

我正在尝试链接一系列任务,returns 一个承诺,在链的最后并行执行。下面的代码不起作用,我认为你可以传递 returns "then" 中的任何对象。有没有正确的方法来实现这个。谢谢。

var startTask = $q.when (  );

startTasks
   .then ( validate )
   .then ( savePayment )
   .then ( refetchPayment )
   .then ( saveContactInfo )
   .then ( $q.all ( [ updateStatus, submitOrder ] ) )
   .then ( successHandler )
   .catch ( errorHandler );

啊哈,$q.all( [ updateStatus, submitOrder] ) 总是 return 立即兑现承诺。

你想做的大概是这样的(猜测)

.then(function(response) {
    return $q.all( [ updateStatus(response), submitOrder(response) ] );
 });

看出区别了吗?

[updateStatus,submitOrder] 只是一个函数引用数组,对不是承诺的事物数组调用 $q.all 总是 return 一个立即解决的承诺。

您需要调用这些函数,因为(我假设)这些函数在调用时return promises

$q.all 采用一系列承诺,return 是一个承诺,当传递给它的所有承诺都得到解决时,它就会解决。