Async/awaitはforEach非同期ループを処理できませんか?!
6410 ワード
結論:Async/awaitはArrayである。prototype.foreachを使用する場合は非同期処理はできません。
ソース:DailyJS
const urls = [
'https://lotsofinformation.com/loop/1',
'https://lessinformation.com/loop/2',
'https://lessinformation.com/loop/3'
];
async function loops() {
await urls.forEach(async (url, idx) => {
const loop = await fetch(url);
console.log(`Fetch loop ${idx+1}`);
});
console.log('Done!');
}
loops();
/* 결과:
Done!
Fetch loop 2
Fetch loop 1
Fetch loop 3
*/
質問:
await
を使用していますが、Done!
はまずログに表示され、その後urls.forEach
の結果が表示されます.await
があっても、最初のurlの応答を待つことなく、処理状態となる.ソリューション:
for...使用
const urls = [
'https://lotsofinformation.com/loop/1',
'https://lessinformation.com/loop/2',
'https://lessinformation.com/loop/3'
];
async function loops() {
for (const [idx, url] of urls.entries()) {
const loop = await fetch(url);
console.log(`Fetch loop ${idx+1}`);
}
console.log('Done!');
}
loops();
/* 결과:
Fetch loop 1
Fetch loop 2
Fetch loop 3
Done!
*/
Reference
この問題について(Async/awaitはforEach非同期ループを処理できませんか?!), 我々は、より多くの情報をここで見つけました https://velog.io/@jha0402/Async-await로-forEach-비동기-loop-처리가-안된다テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol