Javascript AngularJS$q:如何连锁承诺,然后在连锁中最后做平行?

Javascript AngularJS$q:如何连锁承诺,然后在连锁中最后做平行?,javascript,angularjs,promise,q,Javascript,Angularjs,Promise,Q,我正在尝试链接一系列任务,这将返回一个承诺,即在链的最后执行并行执行。下面的代码不起作用,我想您可以传递任何在“then”中返回承诺的对象。有没有一个合适的方法来实现这一点。多谢各位 var startTask = $q.when ( ); startTasks .then ( validate ) .then ( savePayment ) .then ( refetchPayment ) .then ( saveContactInfo ) .then ( $

我正在尝试链接一系列任务,这将返回一个承诺,即在链的最后执行并行执行。下面的代码不起作用,我想您可以传递任何在“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,submitor])
总是返回一个立即解决的承诺

你想做的可能是这样(猜测)

看到区别了吗

[updateStatus,Submitor]
只是一个函数引用数组,调用
$q。对一个数组中的非承诺内容执行所有
操作时,都会返回一个立即解决的承诺

您需要调用这些函数,因为(我假设)这些函数在调用时返回
承诺


$q.all
接受一个承诺数组,并返回一个承诺,当传递给它的所有承诺都得到解决时,该承诺将得到解决。

是的,这些函数返回承诺。我尝试了
。然后($q.all([updateStatus(),submitor()])
,但它也不起作用。我想我真的需要将$q.all调用封装在一个函数中。感谢您的快速回复,非常感谢。这里有一篇非常好的文章:
.then(function(response) {
    return $q.all( [ updateStatus(response), submitOrder(response) ] );
 });