【问题标题】:$q.all - access individual promise result?$q.all - 访问个人承诺结果?
【发布时间】:2018-02-28 16:33:51
【问题描述】:

我对 $q 角度承诺有点陌生。这是我的代码结构:

$q.all(promises).then(function(results) {
    results.forEach(function(data, status, headers, config) {
        console.log(status);
    });
    $scope.saveDocumentCaseState();
}, function errorCallBack(response) {
    console.log('error while mass update case entries');
    console.log(response);
    $scope.submitToWsSuccessful = 2;
});

是否有可能访问每个承诺何时在下一个承诺之前执行的结果?

【问题讨论】:

  • 简单回答:不。请注意,$q.all 的全部意义在于并行执行它们,而不是一个接一个地执行。
  • @JBNizet 嗯。我可以使用 $q 中的其他东西来执行一个又一个承诺,并且我可以在哪里看到每个承诺的结果以便执行一些其他代码?
  • promise.then() 正是这样做的。
  • @JBNizet 嗯。但后来我有一个小问题。我有一个函数,它只需要在所有承诺都实现时执行,另一方面,我需要能够在每个承诺完成后和另一个承诺开始之前执行代码。只有promise.then()我真的找不到答案
  • 好吧,第一种情况使用 all,第二种情况使用 then()。或者干脆在最后的then()中执行终端函数。

标签: angularjs promise angular-promise q


【解决方案1】:

因此,假设您从名为promiseFactory 的角度工厂接收到一个包含任意数量承诺的数组:

var promises = promiseFactory.getPromises(); // Returns an array of promises

promises.forEach(function(p){
  p.then(promiseSuccess, promiseError);

  function promiseSuccess(){
    // Do something when promise succeeds
  }

  function promiseError(){
    // Do something when promise errors
  }
});

$q.all(promises).then(allSuccess, allError);

function allSuccess(){
  // All calls executed successfully
}

function allError(){
  // At least one of the calls failed
}

【讨论】:

  • 感谢您的努力。如果有一系列承诺怎么办:promiseArray 那么结构会是什么样子?
  • 你想按照promise数组加入数组的顺序执行吗?
  • 哦,好吧,在那种情况下,我会使用$q.all()!我误解了对不起,我会更新我的答案。
  • 好的,另一个曲线球 :) 那么另一个问题......因为它是动态的,这是否意味着对每个承诺的调用 then() 完全相同?
  • 是的,应该没问题,只要数组中的所有内容都是一个promise并且它可以针对它执行then()方法。
猜你喜欢
  • 2016-08-13
  • 2013-12-08
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多