如何避免Firebase函数递归

时间:2019-02-21 13:15:32

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

以下情况:

创建测验应用。每当用户结束测验时,他的分数就会更新。在此更新中,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功能都将再次触发。如何避免这种情况?

1 个答案:

答案 0 :(得分:2)

进行此操作,以便当用户结束测验时,他更新或推送到其他节点。 该功能监视该节点并更新所有用户排名