处理多个承诺的结果

时间:2017-07-28 14:06:00

标签: javascript angularjs

在Angular 1.X应用程序中,如果我想处理两个promise的结果,那么实现它的方法是否比这更优雅:

function doSomethingWithBothResults(result1, result2) {
  return result 1 + result2;
}

$http.get('/endpoint1').then(function (result1) {

  $http.get('/endpoint2').then(function (result2) {
    doSomethingWithBothResults(result1 + result2);
  });
});

虽然当只有2个承诺时这很好,但是由于数量较大而导致的深度嵌套令人不安。

1 个答案:

答案 0 :(得分:3)

您可以使用Promise.all

您的代码段会是这样的:

let promises = [];
promises.push($http.get('/endpoint1'));
promises.push($http.get('/endpoint2'));

Promise.all ( promises ).then ( function ( data ) {
    //Data from all the promises
} ).catch ( function ( error ) {
   //Error
} );

在回调函数中,data是一个数组,其每个元素都包含promise的已解析值。此外,data中元素的顺序与您在数组中推送它们的顺序相同。

如果您的承诺彼此独立,这将非常有用。如果他们需要先前承诺的结果,那么链接就是要走的路。此外,这将开始同时解决两个承诺,而链接方法将等待一个解决然后开始解决下一个承诺