2017-10-25 13 views
0

私のforループでajaxリクエストがあり、各繰り返しで繰り返しインデックスの値 'i'を出力しようとしています。私はforループでajaxを実行するラッパー関数(多くの記事で示唆されている)を使用しています。しかし、私はコンソールの値を印刷すると、ランダムに印刷されます。そして、私がforループを実行するたびに、それは異なっています。forループ内のajaxが順番に実行されない

は、ここに私のループとラッパー関数の

get_process_status(){     //new 

     for(var i=0; i<this.state.current_auto_video_jobs_urls.length; i++){ 
      this.get_auto_video_jobs_array(i) 
     } 
    } 

//wrapper function 

    get_auto_video_jobs_array(i){ 
     var that = this; 
     var settings_3 = { 
      "async": true, 
      "crossDomain": true, 
      "url": that.state.current_auto_video_jobs_urls[i], 
      "method": "GET", 
      "headers": { 
       Authorization: "Token " + that.props.token_Reducer.token 
      }, 
      success: function (response, textStatus, jQxhr) { 
       console.log("success") 
       console.log("value of i is " + i) 
      }, 
     } 

     $.ajax(settings_3).done((response) => { 
      auto_video_jobs_array.push(response) 
      if(i == that.state.current_auto_video_jobs_urls.length -1){ 
       console.log("i reached last value") 
       that.setState({current_auto_video_jobs: auto_video_jobs_array}) 
       console.log("current jobs are" + that.state.current_auto_video_jobs) 
      } 
     }); 
    } 

コンソール出力

enter image description here

あなたは2回で見ることができる、iの値が異なるシーケンスにあった印刷です。ループが実行されるたびに順番に0〜9になるのはなぜですか?

+2

successハンドラ内でループを配置する必要が動作するようにあなたのコードの場合 ... –

+0

https://stackoverflow.com/questions/11488014/ asynchronous-process-a-javascript-for-loop – Akhil

答えて

0

名前が示すように(非同期JavascriptとXML)、は非同期です。つまり、AJAXは逐次実行されません。あなたはアヤックスで「A」は「非同期」のためであるAjaxリクエスト

関連する問題