我有一个应用程序,允许用户每天投票 5 次。每次投票都会推送到一个votes节点。我有一个的onCreate云功能听votes揭开序幕了一些交易,每一个刚增量几个节点之一tally/total,tally/users/{userId}等等。投票功能和 onCreate 已经过测试并按预期工作。昨天我们部署到生产环境,我运行了一个查询tally/users,看看是否有任何用户找到了一天投票超过 5 次的方法。当然,有两个用户在第一天被标记为已投票 6 次。于是我在实际votes节点上查询了一下,发现那些用户实际上只提交了5票。所以...我的交易对 5000 多个用户中的两个不起作用。对于我们的案例,我们真的不需要这些计数器非常准确,但是有什么关系呢?我是否遗漏了有关 firebase 交易的某些信息,或者它们真的不能指望吗?(双关语)不要取笑我结构不佳的数据库...exports.allVotesOnCreate = functions.database .ref('/votes/all/{pushId}') .onCreate( (snapshot, context) => { const vote = snapshot.val(); const { date, userId, uid } = vote; return Promise.all([ // removed other transactions for brevity ref(`tally/all/total`) .transaction(value => value ? value + 1 : 1 ), ref(`tally/user/byDate/${userId}/${date}`) .transaction(value => value ? value + 1 : 1 ), ]).catch(err => { console.error(`Error tallying vote ${uid}`, err); }); } );我预计votes特定用户在特定日期的投票数将与其在 中的票数相匹配tally/user/byDate/{userId}/{date},但也有少数事件,当实际票数为 5 时,票数为 6。我什至可以预期,如果交易以某种方式失败,计数可能会少于实际投票数,但更多?如何?
添加回答
举报
0/150
提交
取消
