【发布时间】:2018-05-24 19:00:29
【问题描述】:
我正在尝试在 Cloud Functions 中编写一个函数,该函数在每次创建用户时触发,然后将该用户保存到用户列表中,最后增加用户计数器。 但是我不确定我是否正确使用了 Promise。
exports.saveUser = functions.auth.user().onCreate(event => {
const userId = event.data.uid
const saveUserToListPromise = db.collection("users").doc(userId).set({
"userId" : userId
})
var userCounterRef = db.collection("users").doc("userCounter");
const transactionPromise = db.runTransaction(t => {
return t.get(userCounterRef)
.then(doc => {
// Add one user to the userCounter
var newUserCounter = doc.data().userCounter + 1;
t.update(userCounterRef, { userCounter: newUserCounter });
});
})
.then(result => {
console.log('Transaction success!');
})
.catch(err => {
console.log('Transaction failure:', err);
});
return Promise.all([saveUserToListPromise, transactionPromise])
})
我想确保即使有很多用户同时注册,我的 userCounter 仍然正确,并且 saveUser 函数不会在事务和保存到列表发生之前终止。
所以我尝试了这个,它工作得很好,但是我不知道这是否是实现我想要的功能的正确方法,我也不知道当实际上有很多用户触发时这是否仍然有效立即使用该功能。
希望你能帮助我。 提前致谢。
【问题讨论】:
标签: javascript node.js firebase google-cloud-functions google-cloud-firestore