2017-08-13 138 views
0

我在寫一個for循環,它使用$ http獲取JSON文件並將其內容分配給數組索引。

基本上發生的事情是vm.newLanguages成爲一組語言;

['Korean','English','Spanish'] 

然後for循環加載語言事實爲每種語言的JSON文件,並指定他們vm.facts [1] ...

korean-facts.JSON, english-facts.JSON, spanish-facts.JSON 

這一切工作正常。但是,在JSON文件的GET請求中,for循環的索引增加1,我不是100%確定原因。這意味着韓國事實被放入vm.facts [1]而不是vm.facts [0],英語事實被放入vm.facts [2]而不是vm.facts [1]等。

Now ,我可以簡單地減去for循環中的索引來解決問題,但我想知道爲什麼索引在for循環中可能會增加。

角JS

$http.get('/ctrl/dashboard/get-new-languages.php').then(function(response){ 
     vm.newLanguages = JSON.parse(response.data.newLanguages); 

     for(var i = 0; i < vm.newLanguages.length; i++){ 
      var item = vm.newLanguages[i]; 
      var facts; 
      console.log(i); //this is correct (i) 
      $http.get('/js/language-facts/' + item.toLowerCase() + '-facts.json').then(function(response){ 
       facts = response.data; 
       console.log(i); //this is now i+1 
       vm.facts[i] = facts; 
      }); 
     }; 

    }) 

回答

0
$http.get('/js/language-facts/' + item.toLowerCase() + '-facts.json').then(function(response){ 
      facts = response.data; 
      console.log(i); //this is now i+1 
      vm.facts[i] = facts; 
     }); 

是一個異步函數並且將輸出後,當循環已經迭代,因此你在的console.log()打印我的更新值,因爲在循環已經移動上。

爲了讓你不得不把它包在一個閉止回閥example

+0

OK預期的行爲,我明白了,所以這實際上是預期的行爲? –

+0

我添加了一個鏈接來獲得預期的行爲,pleasse檢查 – marvel308