如何使用单个回调异步排队和执行多个promise?

时间:2016-04-18 17:11:03

标签: javascript node.js http asynchronous promise

我正在使用http请求库got。使用此包,http连接是异步,快速且易于键入的。 " got" cha是got是一个有保障的包,这给我带来了一些挑战。一个是我不知道如何传递对got的引用。

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

在这个例子中,我没有制作一个promises数组,而是获得了一个响应对象数组。

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按预期行事。

1 个答案:

答案 0 :(得分:1)

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