firebase云功能在下载数据库数据之前终止



我正在尝试在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将导致功能等待所有承诺(写入)解决。

最新更新