【发布时间】: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