【问题标题】:Update value of variable from Firebase query?从 Firebase 查询中更新变量的值?
【发布时间】:2016-09-10 17:22:21
【问题描述】:

我目前正在尝试使用 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);
},

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 2011-01-16
      • 2017-01-07
      相关资源
      最近更新 更多