数组未在javascript函数之外定义?
我在React Native中定义了一个函数,用于从Firebase获取对象并将其内容推送到数组中。然而,尽管在我调用“push”之后数组被很好地填充,但在for循环的末尾它是未定义的。我不知道为什么会被清除,因为我在for循环之外定义数组,所以我想我应该要求额外的一双眼睛,以防我遗漏了什么数组未在javascript函数之外定义?,javascript,arrays,firebase,react-native,undefined,Javascript,Arrays,Firebase,React Native,Undefined,我在React Native中定义了一个函数,用于从Firebase获取对象并将其内容推送到数组中。然而,尽管在我调用“push”之后数组被很好地填充,但在for循环的末尾它是未定义的。我不知道为什么会被清除,因为我在for循环之外定义数组,所以我想我应该要求额外的一双眼睛,以防我遗漏了什么 var newList = []; var arrayLength = userArray.length; for (var i = 0; i < arrayLength; i
var newList = [];
var arrayLength = userArray.length;
for (var i = 0; i < arrayLength; i++) {
var userRef = usersRef.child(userArray[i]);
userRef.once('value', function(snap) {
newList.push({
name: snap.val().name,
description: snap.val().description,
});
//this log statement prints out correct array
console.log("NEWLIST" + newList[i]);
});
//but array is undefined here
console.log("NEWLIST 2" + newList[i]);
}
this.setState({
current: this.state.current.cloneWithRows(newList),
past: this.state.past.cloneWithRows(oldList)
});
var newList=[];
var arrayLength=userArray.length;
对于(变量i=0;i
阅读JavaScript的异步特性。once函数接受回调。外部作用域中的console.log将在您将任何项目推送到数组之前执行。了解JavaScript的异步特性。once函数接受回调。外部作用域中的console.log在您将任何项推送到阵列之前执行。代码看起来不错,但我认为这里可能发生的情况是,userRef.once()
是一个异步调用,您的外部console.log
首先执行。当事件触发回调时,您的内部console.log()
打印值代码看起来不错,但我认为这里可能发生的是userRef.once()
是一个异步调用,而您的外部console.log
将首先执行。当事件触发回调时,您的内部console.log()
会打印值数组没有被清除,只是当您记录NEWLIST 2
时它还没有被填充。数据是异步加载的,您的代码(幸运的是用户)没有等待结果。您的日志应该按照它们出现的顺序显示:NEWLIST 2
,然后才是NEWLIST
。有关此现象的详细解释,请参阅,当您记录NEWLIST 2
时,阵列尚未被清除,只是尚未填充。数据是异步加载的,您的代码(幸运的是用户)没有等待结果。您的日志应该按照它们出现的顺序显示:NEWLIST 2
,然后才是NEWLIST
。有关此现象的详细解释,请参阅和