在我的应用程序中,我有以下侦听器,它最初获取所有子元素,然后获取每个新添加的子元素:
onChildAdded(queryRef, function(messageSnapshot) {
let data = messageSnapshot.val()
// The following log is ran multiple times on the inital run(once for each child element)
console.log(data)
});
我想检测侦听器何时完成并收集初始运行的所有数据。目前,它一次记录每个孩子。相反,我只想记录一个包含所有孩子数据的对象。为此,我需要一种方法来检测初始运行何时完成,以及所有子项何时已被初始获取。
搜索后,我找不到任何解决方案或内置方法来完成此任务。谢谢。
仅使用
onChildAdded
,没有好的方法来确定初始数据何时加载。您需要使用 onValue
来实现此目的,或者同时使用 onChildAdded
和 onValue
。
第二种情况的例子:
let hasLoadedInitialValue = false;
onChildAdded(queryRef, function(messageSnapshot) {
console.log(hasLoadedInitialValue, messageSnapshot.val());
});
onValue(queryRef, function(messagesSnapshot) {
hasLoadedInitialValue = true;
});
现在您将首先看到其中的一些行:
假,
假的,
假的,
然后一旦加载了所有初始数据并且添加一个新的子节点,您将看到:
真实,
这已经被报道过很多次了,所以我建议检查一下:
其中许多帖子可能使用命名空间 JavaScript API,但是我在回答您之前的问题时给出的从命名空间 API 升级到模块化 API 的链接应该向您展示如何转换该代码。