我正在尝试在Firebase实时数据库目录中对所有孩子进行操作,但是,我遇到了无法解决的问题。使用" child_added"触发器下载数据呼叫目录中每个孩子的功能。通常,在这种情况下使用承诺会很好,但是,由于多次称为同一功能,我的功能在on('child_added')函数被调用并丢失所有其他调用后最终会持续。我不知道如何解决这个问题,所有建议都将受到赞赏!
不要使用child_added
,因为它永远不会停止侦听,并且您的功能必须尽快终止。取而代之的是,使用once('value')
获取所有数据,并利用其返回的承诺在可用的快照时继续进行。它可能与该样本相似,除了该仓库中的许多其他样本。
您仍然可以使用承诺,但是在退回诺言之后,不再关闭功能等待所有承诺。
我不确定您的云功能是什么样子,但让我们假设它是数据库触发
functions.database.ref('/some/trigger').onWrite(async event => {
const promises = [];
admin.database().ref('/some_child').on('child_added', snapshot => {
const pushRef = admin.database().ref('/some_path').push(snapshot.val()); // Some pretend async operation
promises.push(pushRef);
});
return Promise.all(promises);
}
在此示例中,我正在听/some/trigger
,然后将所有孩子带到路径/some_child
。
然后,我将每个孩子在/some_path
下将每个孩子保存到一个新对象中。
每个承诺都被推到一个数组中,Promise.all
将导致功能等待所有承诺(写入)解决。