如何等待流完成管道? (节点)

新手上路,请多包涵

我有一个 for 循环的 promise 数组,所以我使用 Promise.all 来检查它们,然后调用它们。

 let promises = [];
promises.push(promise1);
promises.push(promise2);
promises.push(promise3);

Promise.all(promises).then((responses) => {
  for (let i = 0; i < promises.length; i++) {
    if (promise.property === something) {
      //do something
    } else {
      let file = fs.createWriteStream('./hello.pdf');
      let stream = responses[i].pipe(file);
      /*
         I WANT THE PIPING AND THE FOLLOWING CODE
         TO RUN BEFORE NEXT ITERATION OF FOR LOOP
      */
      stream.on('finish', () => {
        //extract the text out of the pdf
        extract(filePath, {splitPages: false}, (err, text) => {
        if (err) {
          console.log(err);
        } else {
          arrayOfDocuments[i].text_contents = text;
        }
      });
    });
  }
}

promise1、promise2 和 promise3 是一些 http 请求,如果其中一个是应用程序/pdf,那么我将其写入流并从中解析出文本。但是此代码在从 pdf 中解析测试之前运行下一次迭代。有没有办法让代码等到流的管道和提取完成后再继续下一次迭代?

原文由 ThePumpkinMaster 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 958
1 个回答

没有异步/等待,这是非常讨厌的。使用异步/等待,只需执行以下操作:

 Promise.all(promises).then(async (responses) => {
  for (...) {
    await new Promise(fulfill => stream.on("finish", fulfill));
    //extract the text out of the PDF
  }
})

原文由 Sarsaparilla 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题