AngularJS $ q:如何链接承诺然后在链中最后并行?

时间:2017-05-29 16:24:49

标签: javascript angularjs promise q

我正在尝试链接一系列任务,它们返回一个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 );

1 个答案:

答案 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都被解析时,它会解析。