This question already has answers here:
JavaScript closure inside loops – simple practical example
(44个回答)
3年前关闭。
我有一个
预期结果将是:
在rootRef的外部,0
外部的rootRef,1
在rootref的内部,0
在rootref中,1
实际结果:
在rootRef的外部,0
外部的rootRef,1
在rootref中,1
在rootref内部,2
(44个回答)
3年前关闭。
我有一个
alumId
列表,我想传递给firebase查询并检索基于id的信息。现在,我遇到了一个for循环未正确循环的错误。预期结果将是:
在rootRef的外部,0
外部的rootRef,1
在rootref的内部,0
在rootref中,1
实际结果:
在rootRef的外部,0
外部的rootRef,1
在rootref中,1
在rootref内部,2
for (var each = 0; each < alumAroundId.length; each++) {
console.log("outside of rootRef", each);
rootRef.child('users').child(alumAroundId[each].key).once('value', function (eventSnap) {
console.log(each, "inside the rootRef is off");
var thisUser = eventSnap.val();
thisUser.distance = alumAroundId[each].distance;
$scope.allAlumAround.push(thisUser);
});
}
最佳答案
您应该阅读闭包以及如何使用它们。主要问题是for循环的内容不会在每次迭代中创建新的作用域。因此,当您的for循环结束时,“每个”变量已更改为最后一个。 firebase查询完成后,它将使用此值。您可以通过执行以下关闭操作来解决此问题:
for (var each = 0; each < alumAroundId.length; each++) {
console.log("outside of rootRef", each);
(function(each){
rootRef.child('users').child(alumAroundId[each].key).once('value', function (eventSnap) {
console.log(each, "inside the rootRef is off");
var thisUser = eventSnap.val();
thisUser.distance = alumAroundId[each].distance;
$scope.allAlumAround.push(thisUser);
});
})(each);
}
关于javascript - for循环内的查询无法正常运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39299563/
10-10 05:39