【问题标题】:firebase 8.4 runs .once() repeatedlyfirebase 8.4 重复运行 .once()
【发布时间】:2021-05-02 08:45:57
【问题描述】:

我的应用程序在 firebase@8.3.3 中运行良好。在 8.4.0/1/2/3 上,.once() 代码被无限期地重复执行。

我的代码:

public buStateClick(key: string, action: state) {
    this._afDB.database.ref(`${path}/${key}/state`).once('value', (snap) => {
      this._afDB.database.ref(`${path}/${key}/state`).off(); // required after 8.4.0
      if (snap.exists()) {
        this._afDB.database.ref(`${path}/${key}`).update({state: newState});
      }
    });
}

在我没有 .off() 的原始程序中,当代码运行时,.once() 和 .update() 被执行超过 700 次,直到堆栈失败。添加 .off() 会将其恢复为原始行为。

我相信 .once() 应该是 .off() 本身,并且永远不应该运行超过一次。代码没有理由需要 .off() 才能工作。

参考:我原来的问题 firebase 8.4 makes my .once() keep firing [was: firebase 8.4 makes my onclick event keep firing]

@NickArmitage 也有类似的问题,但他的代码只能运行到 8.3.2。

【问题讨论】:

  • SDK 版本 8.4.0 中似乎存在一个错误,导致 8.4.1 的后续版本非常快速,因此您可能需要升级以查看是否可以解决问题: firebase.google.com/support/release-notes/…
  • @FrankvanPuffelen 正如我所指出的,问题在 841 842 和 843 中仍然存在。
  • 我可以在这里重现这个问题:jsbin.com/xofinop/4/edit?html,js,console。乍一看,这确实像是一种回归,所以我正在与团队核实可能发生的情况。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

firebaser 在这里

这确实是8.4版本SDK的回归。感谢您提供清晰的 MCVE,我能够使用我在 my comment above 中链接的 JSBin 来重现它。

该错误也记录在 SDK 的 Github 存储库中,并且正在修复中。请密切关注issue 以获取任何更新。

【讨论】:

  • 是的,在 8.6.1 中发布
猜你喜欢
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2011-02-27
  • 2021-04-27
  • 1970-01-01
  • 2016-02-09
相关资源
最近更新 更多