我有一个alumId
的列表,我希望将其传递给firebase查询并根据ID检索信息。现在,我正面临一个错误,即for循环没有正确循环。
预期结果将是:
实际结果:
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);
});
}
答案 0 :(得分:2)
您应该阅读闭包以及如何使用它们。主要问题是for循环内容不会在每次迭代时创建新范围。所以当你的for循环完成你的&#34;每个&#34;变量已更改为最后一个。完成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);
}