node.js - 等到所有 promise 完成

标签 node.js

我如何知道 for 循环内的所有 Promise 何时完成执行?有更好的方法吗?

for (let index = 0; index < array.length; index++) {
  request(array[index], function (error, response, body) {
    promise1().then(result1 => {
      if (result1 !== 0) {
        promise2().then(result2 => {
          promise3(result2);
        }
      } else {
        promise3(result1);
      }
    });
  });
}

console.log('all promises finished');

最佳答案

通过将代码转换为使用 async/await 将项目映射到 Promise,然后使用标准 Promise.all() 等待所有 promise 解决的函数:

// promisified request()
const requestP = item =>
  new Promise((resolve, reject) => {
    request(item, (error, response, body) => {
      if (error) return reject(error);
      resolve({ response, body });
    });
  });

const processItem = async item => {
  const { response, body } = await requestP(item);
  const result1 = await promise1(/* this probably uses response or body? */);
  if (result1 !== 0) {
    const result2 = await promise2();
    return await promise3(result2);
  } else {
    return await promise3(result1);
  }
};

const promises = array.map(processItem);

Promise.all(promises).then(() => {
  console.log("all promises finished");
});

关于node.js - 等到所有 promise 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56754301/

相关文章:

javascript - 如何让循环等待node.js中的回调?

javascript - socket.io:客户端发出回调永远不会触发

javascript - Webpack 2.3.3 - 类型错误 : $export is not a function

node.js - 无法使用 Node App Engine 和 TypeOrm 连接到 Google Cloud SQL

javascript - 根据来自 php 脚本的作业订单安排 cron 作业的更好方法

node.js - 通过 CDN 使用 Foundation 图标集

node.js - AMQPLIB - NodeJS - 在 RabbitMQ 中断言惰性队列

javascript - Node.js http 基本身份验证

node.js - 如何使用 MongoDB/NodeJS 进行大规模随机更新

node.js - Laravel Mix : Update a Node. js 依赖