迭代和修改 Firebase 数组导致未定义
Iterating and modifying Firebase array causes undefined
编辑:似乎 value[i].extrainfoimage 仅在 imageRef.child("-JlSvEAw ......
中未定义
到目前为止,我已经通读了两遍文档,但仍然无法理解这一点。
基本上我从 firebase 加载一些数据并将其设置为数组。我遍历该数组并打算在迭代时用我从 Firebase 数据库中的其他位置获取的数据替换一些属性。但是每次我去替换我得到的属性
"Uncaught TypeError: Cannot set property 'extrainfoimage' of undefined"
这是我的代码:
var questionsRef = new Firebase("https://XX.firebaseio.com/Questions");
var imageRef = new Firebase("https://XX.firebaseio.com/Images");
//get the first 6 items
var query = questionsRef.orderByChild('date_time_asked').limitToFirst(6);
//get them as a firebase array promise
$scope.questions = $firebaseArray(query);
//wait for it to load
$scope.questions.$loaded().then(function (value) {
//iterate through
for (i = 0; i < value.length; i++) {
//check if there is data to be replaced
if (value[i].extrainfoimage) {
//if there is fetch it from firebase and replace
imageRef.child("-JlSvEAwu5-WZJkOE_b/image").once("value",function(data){
value[i].extrainfoimage = data.val();
});
}
}
})
可能是因为值中的最后一项没有 extrainfoimage
。因为您的 value[i].extrainfoimage
集是异步的,它没有捕获正确的 i
值,因此在执行时失败。
尝试将其包装在 IIFE 中:
for (i = 0; i < value.length; i++) {
//check if there is data to be replaced
if (value[i].extrainfoimage) {
(function(curr) {
//if there is fetch it from firebase and replace
imageRef.child("-JlSvEAwu5-WZJkOE_b/image").once("value",function(data){
value[curr].extrainfoimage = data.val();
});
})(i);
}
}
编辑:似乎 value[i].extrainfoimage 仅在 imageRef.child("-JlSvEAw ......
中未定义到目前为止,我已经通读了两遍文档,但仍然无法理解这一点。
基本上我从 firebase 加载一些数据并将其设置为数组。我遍历该数组并打算在迭代时用我从 Firebase 数据库中的其他位置获取的数据替换一些属性。但是每次我去替换我得到的属性
"Uncaught TypeError: Cannot set property 'extrainfoimage' of undefined"
这是我的代码:
var questionsRef = new Firebase("https://XX.firebaseio.com/Questions");
var imageRef = new Firebase("https://XX.firebaseio.com/Images");
//get the first 6 items
var query = questionsRef.orderByChild('date_time_asked').limitToFirst(6);
//get them as a firebase array promise
$scope.questions = $firebaseArray(query);
//wait for it to load
$scope.questions.$loaded().then(function (value) {
//iterate through
for (i = 0; i < value.length; i++) {
//check if there is data to be replaced
if (value[i].extrainfoimage) {
//if there is fetch it from firebase and replace
imageRef.child("-JlSvEAwu5-WZJkOE_b/image").once("value",function(data){
value[i].extrainfoimage = data.val();
});
}
}
})
可能是因为值中的最后一项没有 extrainfoimage
。因为您的 value[i].extrainfoimage
集是异步的,它没有捕获正确的 i
值,因此在执行时失败。
尝试将其包装在 IIFE 中:
for (i = 0; i < value.length; i++) {
//check if there is data to be replaced
if (value[i].extrainfoimage) {
(function(curr) {
//if there is fetch it from firebase and replace
imageRef.child("-JlSvEAwu5-WZJkOE_b/image").once("value",function(data){
value[curr].extrainfoimage = data.val();
});
})(i);
}
}