我有一个
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/