質問: ``` function forRoop(){ for(var i=0;i<=3;i++){ console.log("For"); GetServ(); } } function GetServ(){ var xhr= new XMLHttpRequest(); //XML処理(割愛) xhr.addEventListener("load", function(e){ console.log("Get"); }); } ``` このような処理があった場合、XMLHttpRequestが同期処理設定でもログに出力される結果は ``` For For For Get ``` となります。 for文でXMLHttpRequestの結果を取った後にfor文を再開させる良い方法はありませんか?
回答: 「`for`文を中断させる」というのは、**できませんしやるべきでありません**。というのも、通信待ちのあいだじゅう、**ブラウザがフリーズしてしまう**からです(同じ理由で、XHRの同期モードも非推奨となっています)。 XHRの取得後に処理を再開させるには、XHRのイベントに書くほかありませんが、それをやりだすとネストがカオスになる「コールバック地獄」に陥ります。`Promise`とか`aync-await`とか、シンプルに書く手法もいろいろありますが、それぞれに癖があります。 JavaScriptは如何にしてAsync/Awaitを獲得したのか Qiita版