【问题标题】:AngularJS $q: How to chain promises then do parallel last in the chain?AngularJS $q:如何链接承诺然后在链中最后进行并行?
【发布时间】:2017-05-30 04:10:55
【问题描述】:

我正在尝试链接一系列任务,返回一个承诺,在链的最后一个并行执行。下面的代码不起作用,我认为您可以在“then”中传递任何返回承诺的对象。是否有适当的方法来实现这一点。谢谢。

var startTask = $q.when (  );

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

【问题讨论】:

标签: javascript angularjs promise q


【解决方案1】:

啊哈,$q.all( [ updateStatus, submitOrder] ) 总是返回一个立即解决的承诺。

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

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

看到区别了吗?

[updateStatus,submitOrder] 只是一个函数引用数组,在一组不是承诺的事物上调用$q.all 将始终返回一个立即解决的承诺。

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

$q.all 接受一个 promise 数组并返回一个 promise,当传递给它的所有 promise 都被解析时,它就会解析。

【讨论】:

  • 是的,这些函数返回承诺。我试过.then ( $q.all ( [ updateStatus ( ), submitOrder ( ) ] ) ),但也没有用。我想我真的需要将 $q.all 调用包装在一个函数中。感谢您的快速回复,非常感谢。
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 2013-05-02
  • 2014-10-31
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2015-02-04
相关资源
最近更新 更多