すみません、教えてください。
forEachやmapを使って順番に処理を行う必要があるのですがなかなかうまくいきません。
求める流れは、1番の処理が完了して2番の処理が流れるようにしたいのですが
実際には1番と2番の処理が同時に実行されているような結果になります。
javascript
1// 処理するデータ 2data = [ 3 ["1番"], 4 ["2番"] 5]; 6 7main() 8 9// メイン処理 10async function main() { 11 12 //順番に処理 13 await Promise.all(data.map(async i => { 14 console.log(i[0]+"の処理開始!") 15 const result = await execute(i) 16 console.log(result) 17 })), 18 19 // 終了通知 20 console.log("全てのmain()処理完了!") 21} 22 23// 同期処理 24async function execute(i) { 25 return new Promise((resolve, reject) => { 26 setTimeout(()=>{ 27 resolve(i[0]+"の処理が今終わったよ!"); 28 }, 1000); 29 }); 30}
以下の実行結果になってしまいます。
1番の処理開始!
2番の処理開始!
1番の処理が今終わったよ!
2番の処理が今終わったよ!
全てのmain()処理完了!
【理想】
1番の処理開始!
1番の処理が今終わったよ!
2番の処理開始!
2番の処理が今終わったよ!
全てのmain()処理完了!
new promiseを使ってresolveを待ち受けるようにもしたのですが結果は変わらず。
どのようにすれば正しく処理を行うことができますでしょうか?
(同期処理関数(execute)部分は諸事情によりsetTimeout使って疑似的に同期実行を再現しているため一切変更できないモノとします)
以下、実際に動くデモをご用意しました。
https://stackblitz.com/edit/js-kgctbu?file=index.js
大変申し訳ありませんがどなたかご教示いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー