如何通过一个回调异步排队和执行多个promise

How can I queue and execute multiple promises asynchronously with a single callback?

本文关键字:排队 执行 promise 异步 一个 何通过 回调      更新时间:2023-09-26

我正在使用http请求库get。有了这个包,http连接是异步的、快速的,并且很容易键入。"got"恰恰是got是一个有前景的包,这给我带来了几个挑战。一个是我不知道如何传递对got的引用。

我需要做的是使用got和文件流来下载几个url的页面内容。完成所有这些流后,我想继续编写代码。

在这个例子中,我得到的不是一个承诺数组,而是一个响应对象数组。

const getFile = (fileUrl) => {
  return new Promise((resolve) => {
    got.stream(fileUrl).pipe(fs.createWriteStream(path.basename(fileUrl)))
    .on('finish', () => {
      successMessage('downloaded ' + fileUrl + '!');
      resolve();
    });
  });
};
// create an array of these got promises
let promises = []
for (let file of body.files) {
  promises.push(getFile(file));
}


getFile助手存在的原因是将got封装在promise中,以便在执行所有got之后,我可以使用promise.all调用:

// after all got's have executed
promises.all(promises).then(() => {
  console.log('all promises resolved');
}

寻求帮助,了解如何更改第一个代码段,使promises.all的行为符合预期。

Promise聚合函数称为Promise.all(),而不是promises.all()