javascript - 防止 Firebase 云功能中的竞争条件

标签 javascript firebase google-cloud-functions race-condition

我使用全局变量构建 firebase 云函数,将答案递增到对象中。 问题是当相同的用户试图同时增加变量时,我正在寻找一种方法来防止出现这种情况。

 const functions = require('firebase-functions');


// global variable 
let answers = {'a':0, 'b':0,'c':0}

exports.tryGetCount = functions.https.onRequest((req, res) => {
    // console.log(req.body)
    let userAnswer = req.body.answer;
    let userInformation = req.body.userInfo;
    if(answers.hasOwnProperty(userAnswer)){
        answers[userAnswer]++; // increment the answer 
        return res.send({answers:answers})
    }
    return res.status(400).json({error:'invalid answer propertu'})




});

最佳答案

-- 不使用全局变量,而是使用事务

https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions

var ref = new Firebase('xxx');

var countRef = ref.child("ans").child("-KGb1Ls-gEErWbAMMnZC").child('count');

countRef.transaction(function(currentCount) {
   return currentCount + 1;
});

关于javascript - 防止 Firebase 云功能中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49841515/

相关文章:

javascript - 如何在使用 lodash 省略空值的同时合并两个对象

android - Firebase 用户登录失败,电子邮件无效 com.google.firebase.auth 未找到

google-cloud-platform - 无法使用无服务器 VPC 访问设置 Google Cloud Memorystore redis 实例

Javascript 使用 SheetJS 在服务器上读取 Excel 文件

javascript - 先进的 D3 转换测序;继承不同选择的转换延迟/持续时间

javascript - 如何增加 Firestore 中的字段?

javascript - 如何在 VueJS 中读取 Firebase 数据?

python - "finished with status: ' crash'"对于 Cloud Functions 是正常的吗?

javascript - Firebase:doc.data() 返回空对象

javascript - 需要一个在三个值之间循环的切换按钮