在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个承诺时这很好,但是由于数量较大而导致的深度嵌套令人不安。
答案 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
中元素的顺序与您在数组中推送它们的顺序相同。
如果您的承诺彼此独立,这将非常有用。如果他们需要先前承诺的结果,那么链接就是要走的路。此外,这将开始同时解决两个承诺,而链接方法将等待一个解决然后开始解决下一个承诺