我在React-Native中定义了一个从Firebase获取对象并将其内容推送到数组的函数。但是,虽然在调用'push'之后数组正在填充,但在for循环结束时它是未定义的。我不知道为什么它被清除了,因为我在for循环之外定义了数组,所以我想我会要求额外的一双眼睛,以防我遗漏任何东西。
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)
});
答案 0 :(得分:1)
阅读JavaScript的异步性质。 一次 功能会进行回调。外部作用域中的console.log在您向阵列推送任何项目信息之前执行。
答案 1 :(得分:1)
代码看起来不错,但我认为这里可能发生的是<textarea id="get_url" placeholder="Enter Your URL here" class="get_url_input" spellcheck="false" ></textarea>
<input type="button" value="Share">
<div id="results">
</div>
是异步调用,而你的外userRef.once()
首先被执行。当事件触发回调时,您的内部console.log
会打印值