【发布时间】:2014-08-01 11:38:56
【问题描述】:
假设我有某种游戏。我有一个这样的 buyItem 函数:
buyItem: function (req, res) {
// query the users balance
// deduct user balance
// buy the item
}
如果我向该路由发送垃圾邮件直到扣除用户余额(第二次查询),则用户的余额仍然是正数。
我尝试过的:
buyItem: function (req, res) {
if(req.session.user.busy) return false;
req.session.user.busy = true;
// query the users balance
// deduct user balance
// buy the item
}
问题是req.session.user.busy 将是undefined 对于前〜5 个请求。所以这也行不通。
我们如何处理这种情况?如果这很重要,我正在使用 Sails.JS 框架。
【问题讨论】:
-
你不能直接在模型上调用
.update()跳过余额查询吗? -
你给了我一个想法。你的意思是在数据库中设置余额必须是正数,然后运行
update查询,对吧?如果成功(所以余额仍然是正数)我们可以记入该项目吗? -
是的,只需设置更新条件,使其仅限于余额大于或等于商品价格的用户。如果查询成功,则将该项目添加到他们的列表/库存/随便什么。
标签: node.js express concurrency sails.js