如何在Firebase的''on'方法上调用一个承诺?

时间:2018-04-15 08:39:02

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

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

上面的代码基本上是一个for循环,因为它遍历数据库记录并将它们中的每一个推送到一个数组中,所以可能更好的问题是如何在for上实现一个承诺循环?

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

1 个答案:

答案 0 :(得分:3)

on()没有产生承诺。它无法实现,因为您传递给它的听众会永远持续(并继续提供更改),直到它被off()删除。此行为与promises不兼容。 Promise要求某些工作只执行一次,一旦完成,就不会发生任何会改变结果的工作。

如果要在某个位置接收单个快照的数据,请使用once()而不是on()。 once()返回数据可用时已解决的承诺。这与“child_added”'基本上不兼容。听众,因为他们总是不断产生结果,永远不会以最终结果终止。