2016-09-02 60 views
0

我有一個列表alumId s,我想將它傳遞給firebase查詢並檢索信息庫的id。現在,我正面臨一個錯誤,即for循環沒有正確循環。for循環中的查詢無法正常運行

預期結果將是:

  • 用於rootRef之外,0
  • 外的用於rootRef,1
  • 內部rootref的,0
  • 內部rootref的,1

實際結果:

  • 外的rootRef,爲rootRef 0
  • 外,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); 
    }); 
} 

回答

2

您應該關閉念起來怎麼樣使用它們。主要問題是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); 
}