Javascript Firebase云函数在下载数据库数据之前终止

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')函数被调用一次并错过所有其他调用后继续。我不知道如何补救,所有的建议都很感激 您仍然可以使用承诺,但不是在返回一个承诺后关闭函数,而是等待所有承诺 我不确定你的云函数看起来像什么,但让我们假设它是一个数据库触发器

我正在尝试对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