从Firebase查询更新变量值?

时间:2016-05-14 14:59:10

标签: reactjs firebase react-native firebase-realtime-database

我目前正尝试使用once从firebase中提取项目的值,并使用此值填充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);
},

1 个答案:

答案 0 :(得分:2)

您对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));