【发布时间】: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