【问题标题】:Firebase web application - Calling gotData functionFirebase Web 应用程序 - 调用 gotData 函数
【发布时间】:2020-03-27 13:34:25
【问题描述】:

我正在构建一个使用 JS 和 firebase 作为我的数据库的 Web 应用程序,但我正在努力调用我的 gotData 函数来获取它的返回值。

var dbRef = firebase.database().ref('testing');

function reading(){
      dbRef.on('value', gotData,errData) ;
      }

function gotData(data){

  var tests = data.val();
  var keys = Object.keys(tests);
  var length = keys.length;
  var k = keys[lengthe-1];
  console.log(k)
  console.log(data)
  return k;
}

function errData(err){
  alert('error')
}

代码有效,我得到返回的最新文档的 documentID,但我未能调用此值。

我试过了:

var fbid = gotData(data);

但我得到一个 数据未定义 错误。据我了解,数据仅用于引用 Firebase 数据,因此我可以对其进行操作。我需要做什么才能使用它的数据调用函数?

【问题讨论】:

  • 这听起来确实很不寻常,因为快照应该始终存在于回调中。我没有立即看到您发布的代码有什么问题。能不能在jsbin之类的网站上设置一个小复刻,让我看看?
  • 这里是 jsbin:jsbin.com/jenahuh/edit?html,output。这部分代码仅用于测试,一旦工作,我将在我的网站中实现它。此函数的唯一目的是获取我的 Firebase 中最新文档的 ID(我的代码中的 var k),然后在另一个函数中使用它。感谢您对此进行调查:)
  • 不幸的是,这不是很有帮助,因为它实际上并没有重现问题。如果您害怕共享您的项目配置(is not needed,但仍然很常见),您可以为 jsbin 创建一个临时项目,然后删除该项目。
  • 好的,问题解决后我会删除。这是整个项目,所以我希望这有助于找到解决方案:jsbin.com/mewojen/edit?html,output

标签: javascript firebase firebase-realtime-database


【解决方案1】:

你在 jsbin 的代码底部自己调用gotData(),没有传入参数:

var id = gotData();

我是如何发现这个的:

  1. 将此行作为gotData()中的第一条语句:

    if (!data) debugger
    
  2. 再次运行 jsbin 中的代码,现在将启动调试器。

  3. 检查调用堆栈(在 Chrome 调试器的右侧)以查看调用的来源。

您需要删除此gotData() 调用,并将所有需要数据的代码放入 gotData() 函数中。另见:

【讨论】:

  • 好的,谢谢。我认为有一种方法可以调用该函数,如果没有其他方法,将所有需要数据的代码作为我的备份计划。谢谢你的帮助。除了给你点赞外,我还能做点别的吗(这是我关于堆栈溢出的第一篇文章)?
  • 好的,今晚晚些时候我会通读链接。我在 gotData 中编写了所有内容,它按预期工作。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 2021-04-08
  • 2021-11-05
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多