2017-08-13 95 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