Javascript 迭代和修改Firebase数组会导致未定义

Javascript 迭代和修改Firebase数组会导致未定义,javascript,angularjs,firebase,ionic,Javascript,Angularjs,Firebase,Ionic,编辑:似乎值[i].extrainfoimage只有在imageRef.child(“-JlSvEAw…”中未定义 到目前为止,我已经阅读了两次文档,但仍然无法理解这一点 基本上,我从firebase加载一些数据并将其设置为一个数组。我迭代该数组,并打算在迭代过程中用从firebase DB中其他位置获取的数据替换某些属性。但是每次我都要替换获取的属性 “未捕获的TypeError:无法设置未定义的属性'extrainfoimage'” 这是我的代码: var questionsRef = ne

编辑:似乎值[i].extrainfoimage只有在imageRef.child(“-JlSvEAw…”中未定义

到目前为止,我已经阅读了两次文档,但仍然无法理解这一点

基本上,我从firebase加载一些数据并将其设置为一个数组。我迭代该数组,并打算在迭代过程中用从firebase DB中其他位置获取的数据替换某些属性。但是每次我都要替换获取的属性

“未捕获的TypeError:无法设置未定义的属性'extrainfoimage'”

这是我的代码:

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();
                    });
                }
            }
        })
var questionsRef=新Firebase(“https://XX.firebaseio.com/Questions");
var imageRef=新Firebase(“https://XX.firebaseio.com/Images");
//获取前6项
var query=questionsRef.orderByChild('date\u time\u asked')。limitToFirst(6);
//将其作为firebase阵列获取
$scope.questions=$firebaseArray(查询);
//等待它加载
$scope.questions.$loaded().then(函数(值){
//反复浏览
对于(i=0;i
可能是因为值中的最后一项没有
extrainfoimage
。因为您对
值[i]的设置。extrainfoimage
是异步的,它无法捕获正确的
i
值,因此在执行时失败

试着用生活来包装它:

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);
    }
}
for(i=0;i
$scope.questions.$loaded()。然后(函数(值){
这将返回未定义的
值。您试图将
extrainfoimage
设置为未定义,这就是为什么会出现错误。不,不是。如果非常感谢的话,我不会输入if语句。我想我自己无法解决这个问题。出于某种原因,它实际上不会出现更新图像,直到我切换到另一个页面,然后返回该页面(我认为这更像是一个ionic问题,而不是其他问题),所以我在更改属性之后添加了$ionicSlideBoxDelegate.update();这似乎解决了它。