【问题标题】:How to avoid firebase functions recursion如何避免firebase函数递归
【发布时间】:2019-02-21 13:15:31
【问题描述】:

以下场景:

创建一个测验应用程序。每当用户结束测验时,他的分数就会更新。在本次更新中,firebase 功能会更新所有用户的排名:

exports.onMessageCreate = functions.firestore
  .document('users/{userId}')
  .onUpdate((change, context) => {

    var test=  admin.firestore().collection('users');

    test.orderBy('totalScore', 'desc').get().then(querySnapshot => {
      var rank = 1;
      querySnapshot.forEach(user => {
        user.ref.set({globalRanking: rank}, {merge: true}).then(res => { });;
        rank++;
      });
    });

    return null;

  });

问题是,documentSnapshot.ref.set 用户正在再次更新,因此每次完成 firebase 功能时都会再次触发。我怎样才能避免这种情况?

【问题讨论】:

  • 在用户请求时使用 Firebase 云函数计算排名是否可行,而不是在数据更改时更新所有排名?
  • 这听起来像是一个有效的答案@IanRehwinkel! :)

标签: javascript firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

这样当用户结束测验时,他会更新或推送到不同的节点。 该函数监控该节点并更新所有用户排名

【讨论】:

  • 我认为@Ian Rehwinkel 的回答更好
  • 我不这么认为,因为这意味着您每次用户请求时都会重新计算排名,而它可能甚至没有改变,浪费处理 CPU 使用率。
  • Afaik,firebase 对数据库的请求量收费,而不是 CPU 使用量,所以这并不重要。除非你有几千个用户,否则我提出的方法应该没问题。
  • AFAIK,两者的火力基地费用。
猜你喜欢
  • 2013-06-28
  • 2021-05-13
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2015-05-20
相关资源
最近更新 更多