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

时间:2017-10-02 06:21:27

标签: javascript firebase asynchronous firebase-realtime-database google-cloud-functions

我正在尝试对Firebase实时数据库目录中的所有孩子进行操作,但是,我遇到了一个我无法解决的问题。使用“child_added”触发器下载数据会为目录中的每个子节点调用该函数。通常在这种情况下使用promises会没问题,因为同样的函数被多次调用,我的函数在on('child_added')函数被调用一次并且缺少所有其他调用后最终继续。我不知道如何解决这个问题,所有建议都表示赞赏!

2 个答案:

答案 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(写入)解析。