【问题标题】:Firebase - How to retrieve data from .once callFirebase - 如何从 .once 调用中检索数据
【发布时间】:2017-10-17 16:34:15
【问题描述】:

所以我正在尝试使用以下代码从 firebase 检索数据”

loadblah(){
  var valueArray = [];
  valueArray = firebase.database().ref("/Users/johnny/files/").once('value', function(snapshot){
      console.log(snapshot.val()); //First output
      return snapshot.val();
  });

  console.log(valueArray); //Second output
}

无论如何,正如您所见,我添加了一些用于调试的 console.log,它们得到了完全不同的结果。

第一个输出是我所希望的,例如{ fileOne: {title: blah, text: blah}, fileTwo... } 等等。但对于第二个输出,我明白了。

知道如何在snapshot.val() 中检索数据吗?任何帮助将不胜感激,我对此很陌生。

编辑:如果您能以某种方式向我展示如何使用 .on 功能来同步内容,那就更好了

【问题讨论】:

    标签: javascript firebase react-native firebase-realtime-database react-native-ios


    【解决方案1】:

    对于第一次使用 Firebase 的人来说,您的困惑很常见。

    Firebase once 调用是一个异步 操作,因此,它只会在您的下载最终完成后才完成——在您的@ 之后很久 987654323@ 函数返回。当它执行时,将调用提供的函数,您的数据将准备好在snapshot.val() 中使用。

    相反,存储在您的valueArray var 中的返回值是firebase.Promise,它提供了另一种等待此类值到达的方法。

    您已经为once 调用提供了function,因此您现在可以忽略promise 路由。换句话说,在传递给once 的函数添加你的快照处理逻辑(并忽略它的返回值)。

    【讨论】:

    • 哦,我明白了!所以 functon(snapshot) 只有在项目下载后才会被调用。当我将 console.log() 放在函数中时,它按预期工作。快速提问,我如何在这个函数中设置一个状态?它似乎不允许我 - 例如(this.setState 未定义)
    • @RyanTurnbull Weird... 作为this guide shows,应该也可以从那里调用this.setState
    • 是的,它说 this.setState 不是一个函数,并且是未定义的
    • 如果您对@PauloMattos 感兴趣,我必须创建一个指向 this 的指针,例如 var that = this,它按预期工作。很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2018-05-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2017-10-14
    • 2016-07-31
    相关资源
    最近更新 更多