首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for loop和promises

for loop和promises
EN

Stack Overflow用户
提问于 2016-11-29 21:31:28
回答 3查看 73关注 0票数 1

我有三个方法(每个都是promise)可以从数据库中进行选择。

代码语言:javascript
复制
getDeliverDate()
           .then(calculateOrderList)
           .then(getOrderItemsForOrder)

对于每个deliverDate,我需要获取相应的订单列表,对于每个订单,我需要获取项目列表。然后,我将构建一个发送给客户端的JSONview。并且必须从每个方法推送到对象数据。我真的不确定这种方法是否会奏效。谁能告诉我如何让它工作使用上面的代码作为一个例子。

EN

回答 3

Stack Overflow用户

发布于 2016-11-29 21:34:00

将所有承诺放入一个数组中,然后使用Promise.all等待所有承诺完成并返回结果。就像这样

代码语言:javascript
复制
var promises = []

for (...) {
    promises.push(getDeliverDate()
           .then(calculateOrderList)
           .then(getOrderItemsForOrder));
}

return Promise.all(promises);

  • 编辑,all不是when --让我的promise库混淆了
票数 1
EN

Stack Overflow用户

发布于 2016-11-29 21:34:14

更好的方法是使用Promise.all

代码语言:javascript
复制
Promise.all([getDeliverDate, calculateOrderList, getOrderItemsForOrder])
  .then(values => {
    console.log(values);
  });
票数 1
EN

Stack Overflow用户

发布于 2016-11-29 21:51:47

如果我理解的是正确的(如注释中所给出的):

代码语言:javascript
复制
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调用。也许我们应该考虑优化后端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40867181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档