在我的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);
});
},
答案 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);
});