我正在尝试对Firebase实时数据库目录中的所有孩子进行操作,但是,我遇到了一个我无法解决的问题。使用“child_added”触发器下载数据会为目录中的每个子节点调用该函数。通常在这种情况下使用promises会没问题,因为同样的函数被多次调用,我的函数在on('child_added')函数被调用一次并且缺少所有其他调用后最终继续。我不知道如何解决这个问题,所有建议都表示赞赏!
答案 0 :(得分:1)
请勿使用child_added
,因为它永远不会停止收听,并且您的功能必须尽快终止。相反,使用once('value')
获取所有数据,并在其快照可用时继续使用其返回的promise。除了该回购中的许多其他内容之外,它可能类似于this sample。
答案 1 :(得分:0)
您仍然可以使用promises,但不会在返回一个promise后关闭该函数,等待所有promise。
我不确定您的云功能是什么样的,但我们假设它是一个数据库触发器
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都被推送到一个数组中,Promise.all
将导致函数等待所有promises(写入)解析。