在另一个函数中调用本机故障调用函数?

时间:2016-05-17 02:44:58

标签: javascript function reactjs firebase react-native

在我的React-native应用程序中我试图在我的listenForItems函数中调用另一个函数,但不断收到错误this.populateArray is not a function. In 'this.populateArray(solutions)', this.populateArray is undefined.我在其他类中执行此操作并且它正在工作,但是由于某种原因,它不在这里工作。我有什么遗失的吗?

populateArray: function(solutions) {
    var completed = [];
    var inProgress;

    for (var i = 0; i < solutions.length; i++ ) {
        if (solutions[i].completed == 0) {
            inProgress = solutions[i].id;
        }
        else {
            completed.push(solutions[i].id);
        }
    }
},  

listenForItems: function(cluesRef) {

    var solutions = [];
    userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', function(snap){
        var solution = snap.val();
        for (var i = 0; i < solution.length; i++) {
            if (solution[0].hunt_id == 0) {
                solutions.push(solution[0]);
            }
        }
        this.populateArray(solutions);
    });
},

1 个答案:

答案 0 :(得分:3)

javascript的经典范围问题。 Google将帮助您更好地理解。简而言之,函数内的“this”一词指的是该函数。在此示例中,它引用您在userSolutionsRef.orderByChild中使用的匿名函数(回调)。有很多方法可以解决这个问题。你可以使用ES6(ES2015)箭头功能,在这种情况下它就像

userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', (snap) => {
    var solution = snap.val();
    for (var i = 0; i < solution.length; i++) {
        if (solution[0].hunt_id == 0) {
            solutions.push(solution[0]);
        }
    }
    this.populateArray(solutions);
});

或es5解决方案

var that = this;
userSolutionsRef.orderByChild('user_id').startAt(0).endAt(0).once('value', function(snap){
        var solution = snap.val();
        for (var i = 0; i < solution.length; i++) {
            if (solution[0].hunt_id == 0) {
                solutions.push(solution[0]);
            }
        }
        that.populateArray(solutions);
    });