javascript - 如何在 Firebase 的 '' on'' 方法上调用 promise ?

标签 javascript firebase firebase-realtime-database ecmascript-6 promise

我有一个
databaseReference.on("child_added", snap => { array.push(snap.val()) }
我如何做出 promise ,以便我在.then中调用的任何函数将在 array 之后初始化是否充满了数据库记录?

上面的代码本质上是一个for循环,因为它迭代数据库记录并将每一条记录插入一个数组,所以也许更好的问题是如何在 for 上实现 promise 循环?

我发现最好的方法是在每次迭代时返回 Promise,然后使用 Promise.all ,但我不知道如何在这个具体示例中实现它。

最佳答案

on()不会产生 promise 。它不能,因为您传递给它的监听器将永远持续(并继续传递更改),直到它被 off() 删除。 。这种行为与 promise 不兼容。 Promise 要求某些工作仅执行一次,一旦完成,就不应发生任何其他会改变结果的事情。

如果您想接收某个位置的单个快照的数据,请使用 once()而不是 on()。 Once() 返回一个在数据可用时解决的 promise 。这从根本上与“child_added”监听器不兼容,因为它们总是不断生成结果并且永远不会以最终结果终止。

关于javascript - 如何在 Firebase 的 '' on'' 方法上调用 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49840061/

相关文章:

javascript - 从解码的音频流中清理内存的正确方法(移动)

ios - Firebase 将旧数据加载到 TableView 中

javascript - 按降序从 Firebase 获取数据

java - 如何迭代 Firebase 实时数据库中多个按键的子项?

swift - 根据返回的 queryEqual(toValue) 填充 TableView

javascript - 使用带有 Javascript 代码的类在 span 元素之间包装特定文本

javascript - 将类添加到标签名称

javascript - 基本的 JavaScript 函数语法

javascript - 无法加载 firebase(重定向错误)

android - 集成 firebase 通知后无法在设备中安装应用程序