我正在使用BluebirdJS承诺库。
我有一个名为getOrder的方法,它以promise的形式返回订单详细信息。
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来获取差异并组成一个组合订单对象,但我再次不确定如何让它工作。
实现上述目标的最佳途径是什么?
答案 0 :(得分:0)
您需要Promise.all
而不是Promise.each
:
引用docs:
给定Iterable(数组是Iterable),或Iterable的承诺, 它产生承诺(或承诺和价值的混合),迭代 将Iterable中的所有值转换为数组并返回一个promise 当满足数组中的所有项目时,就会实现这一点。该 promise的履行值是一个履行值为的数组 原始数组的相应位置。如果有任何承诺 数组拒绝,返回的承诺被拒绝拒绝 原因。