我有三个方法(每个都是一个promise)从数据库中执行SELECT。
getDeliverDate()
.then(calculateOrderList)
.then(getOrderItemsForOrder)
对于每个deliverDate,我需要获得相应的订单列表,并且我需要获取每个订单以获取项目列表。然后我将构建一个JSONview发送给客户端。为此,我认为我需要用for循环包装上面的代码,并且可能有一个由数组等构成的“全局”对象。并且必须从每个方法推送到对象数据。我不确定这种方法是否有效。有人可以告诉我如何使用上面的代码作为例子让它工作。
答案 0 :(得分:1)
将所有promises推送到数组中,然后使用Promise.all等待所有promise完成并返回结果。像
这样的东西var promises = []
for (...) {
promises.push(getDeliverDate()
.then(calculateOrderList)
.then(getOrderItemsForOrder));
}
return Promise.all(promises);
all
而非when
- 让我的承诺图书馆感到困惑答案 1 :(得分:1)
更好的方法是使用Promise.all
:
Promise.all([getDeliverDate, calculateOrderList, getOrderItemsForOrder])
.then(values => {
console.log(values);
});
答案 2 :(得分:0)
如果我理解的是正确的(如评论中所述):
getDeliverDate()
// get array of delivery dates
.then((deliveryDates = []) => {
// for each delivery date, I need to get corresponding list of orders
const promises = deliveryDates.map(date => calculateOrderList(date));
return Promise.all(promises);
})
// get order list as an array
.then((orderList = []) => {
// for each order I need to get list of items corresponding to that order
const promises = orderList.map(order => getOrderItemsForOrder(order));
return Promise.all(promises);
})
// get item list as an array
.then((items) => console.log('got everything : ', items))
.catch((error) => console.log('error : ', error))
看起来你需要大量的API调用。可能我们应该考虑优化后端。