我有一个 Promise 的 for 循环数组,所以我使用 Promise.all 来遍历它们,然后调用 then 。
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 中的测试之前运行下一次迭代。有没有办法让代码等到流的管道和提取完成后再继续下一次迭代?
如果没有 async/await,那就很糟糕了。使用 async/await,只需执行以下操作:
Promise.all(promises).then(async (responses) => {
for (...) {
await new Promise(resolve => stream.on("finish", resolve));
//extract the text out of the PDF
}
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)