从 Firebase 查询更新变量值?
Update value of variable from Firebase query?
我目前正在尝试使用 once
从 firebase 中提取项目的值,并使用该值填充变量 itemsList
。但是,尽管 itemsList 在 once
调用中正确填充,但它在调用外部记录为未定义。我认为这可能与 Firebase 的异步特性有关,但我不确定如何解决这个问题。有什么建议么?
submitAnswer: function() {
var userRef = usersRef.child(key);
//get items_list for user
var itemsList;
userRef.once('value', (snap) => {
itemsList = snap.val().items_list;
console.log('items list populated here' + itemsList);
});
console.log("items list not populated here" + itemsList);
},
您对 Firebase 调用的看法是正确的,它是异步的,代码不会在记录未填充的 itemsList 之前等待它完成。
如果您只想对数据做一些简单的事情,请务必在对其执行任何操作之前检查它是否存在(并像处理任何异步数据一样处理它)。
if(itemsList){
console.log('My items have arrived! ' + itemsList);
}
如果该数据将进一步传播到您的应用程序中,通常建议使用您来自 Firebase 的响应数据调用 setState() 以触发使用您刚刚使用的新数据重新呈现您的组件拿来了。
所以类似于:
userRef.once("value", (snap) => {
itemsList = snap.val().items_list;
this.setState({
items: itemsList;
});
}.bind(this));
我目前正在尝试使用 once
从 firebase 中提取项目的值,并使用该值填充变量 itemsList
。但是,尽管 itemsList 在 once
调用中正确填充,但它在调用外部记录为未定义。我认为这可能与 Firebase 的异步特性有关,但我不确定如何解决这个问题。有什么建议么?
submitAnswer: function() {
var userRef = usersRef.child(key);
//get items_list for user
var itemsList;
userRef.once('value', (snap) => {
itemsList = snap.val().items_list;
console.log('items list populated here' + itemsList);
});
console.log("items list not populated here" + itemsList);
},
您对 Firebase 调用的看法是正确的,它是异步的,代码不会在记录未填充的 itemsList 之前等待它完成。
如果您只想对数据做一些简单的事情,请务必在对其执行任何操作之前检查它是否存在(并像处理任何异步数据一样处理它)。
if(itemsList){
console.log('My items have arrived! ' + itemsList);
}
如果该数据将进一步传播到您的应用程序中,通常建议使用您来自 Firebase 的响应数据调用 setState() 以触发使用您刚刚使用的新数据重新呈现您的组件拿来了。
所以类似于:
userRef.once("value", (snap) => {
itemsList = snap.val().items_list;
this.setState({
items: itemsList;
});
}.bind(this));