Javascript Firebase云函数在下载数据库数据之前终止
我正在尝试对Firebase实时数据库目录中的所有子目录进行操作,但是,我遇到了一个无法解决的问题。使用“child_added”触发器下载数据会为目录中的每个子级调用该函数。通常在这种情况下使用承诺是可以的,但是,因为同一个函数被多次调用,我的函数在on('child_added')函数被调用一次并错过所有其他调用后继续。我不知道如何补救,所有的建议都很感激 您仍然可以使用承诺,但不是在返回一个承诺后关闭函数,而是等待所有承诺 我不确定你的云函数看起来像什么,但让我们假设它是一个数据库触发器Javascript Firebase云函数在下载数据库数据之前终止,javascript,firebase,asynchronous,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Asynchronous,Firebase Realtime Database,Google Cloud Functions,我正在尝试对Firebase实时数据库目录中的所有子目录进行操作,但是,我遇到了一个无法解决的问题。使用“child_added”触发器下载数据会为目录中的每个子级调用该函数。通常在这种情况下使用承诺是可以的,但是,因为同一个函数被多次调用,我的函数在on('child_added')函数被调用一次并错过所有其他调用后继续。我不知道如何补救,所有的建议都很感激 您仍然可以使用承诺,但不是在返回一个承诺后关闭函数,而是等待所有承诺 我不确定你的云函数看起来像什么,但让我们假设它是一个数据库触发器
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\u child
上的所有子级
然后,我将把每个子对象保存到/some\u path
下的一个新对象中
每个承诺都被推送到一个数组中,并且
承诺。all
将导致函数等待所有承诺(写入)的解析。不要使用添加的子项,因为它从不停止侦听,并且函数必须尽快终止。相反,使用one('value')
获取所有数据,并利用其返回的承诺在快照可用时继续。除了回购协议中的许多其他操作之外,它可能与类似。我认为您还需要推送添加了异步操作的child\u