for循环索引在$ http请求中使用AngularJS增加1
问题描述:
我在写一个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;
});
};
})
答
$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
OK预期的行为,我明白了,所以这实际上是预期的行为? –
我添加了一个链接来获得预期的行为,pleasse检查 – marvel308