将多个Bluebird承诺组合到一个承诺对象中

Combining multiple Bluebird promises into a single promise object

本文关键字:一个承诺 对象 组合 承诺 Bluebird      更新时间:2023-09-26

我正在使用BluebirdJS promise库。

我有一个名为getOrder的方法,它以promise的形式返回基于PO编号的订单详细信息。

var poNumber = '12345';
return getOrder(poNumber).then(function (order) {
   console.log(order.poNumber, order.items[0].sku);
   return order;
});

然而,我现在需要在循环中调用这个方法,并将有关订单的详细信息组合到一个对象中。

我的ATM是这样的:

var poNumbers = ['12345', '67890'];
return Promise.each(poNumbers, function (poNumber) {
   return Promise.try(function () {
      return getOrder(poNumber).then(function (order) {
          console.log(order.poNumber, order.items[0].sku);
          return order;
      });
   });
}).then(function (combinedOrder) {
   console.log(combinedOrder);
});

但我不确定如何将每个订单的细节组合成一个对象,并将该对象作为承诺返回?

该项目也使用lodash,我尝试使用_.difference来获取差异并组成一个组合订单对象,但我再次不确定如何使其工作。

实现上述目标的最佳方法是什么?

您需要Promise.all而不是Promise.each:

引用文件:

给定Iterable(数组是Iterable)或Iterable的承诺,它产生承诺(或承诺和价值的混合),迭代将Iterable中的所有值转换为数组并返回promise当数组中的所有项都已满足时,即已满足。这个promise的履行值是一个数组,其履行值位于原始阵列的相应位置。如果在数组拒绝,返回的promise将被拒绝原因