目前,我正尝试使用once从火基中提取项的值,并使用此值填充var 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);
},发布于 2016-05-14 15:37:49
关于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));https://stackoverflow.com/questions/37228183
复制相似问题