for循环内部的查询无法正常运行

时间:2016-09-02 19:33:07

标签: javascript angularjs firebase

我有一个alumId的列表,我希望将其传递给firebase查询并根据ID检索信息。现在,我正面临一个错误,即for循环没有正确循环。

预期结果将是:

  • for rootRef之外,0
  • 在rootRef之外,1
  • rootref内部,0
  • rootref内部,1

实际结果:

  • for 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);
    });
}

1 个答案:

答案 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);
 }