私は 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 リクエストであり、そのうちの 1 つが application/pdf である場合は、それをストリームに書き込み、そこからテキストを解析します。ただし、このコードは、pdf からテストを解析する前に次の反復を実行します。ストリームへのパイプ処理と抽出が完了するまでコードを待機させてから、次の反復に進む方法はありますか?
ベストアンサー1
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
}
})