我是刚学习nodejs不久的菜鸟,最近学习的时候遇到个问题,想问一下: 我一个项目里面,项目里有奖品,奖品有1个。当为0个时就领取失败 前端有个按钮可以点击领取奖品,此时同时有2个人点击领取。我在后台的写法就是,先查询奖品个数,也就是 先conn.query(“select * from giftinfo” , function(row){ }) 获取到奖品个数,然后就在回调中进行计算,把奖品个数减一再更新上去。也就是在回调里再进行conn.query(“update …” , function(){})
我自己的项目里在回调中还有几个数据库更新操作,现在的情况就是,同时点击的话,有时会出现奖品只有1个,但是却2个人都领到了奖品。 我自己想了一下,是不是当同时点击时,首先一个人先触发conn.query方法查询,此时查询结果还没返还的时候,nodejs又去执行第二个人的query,于是在两个的查询回调当中,奖品的数量都是一致的,所以都是可以领取。
请问这种情况一般是如何处理的呢?
var events= require(‘events’); var x = new events.EventEmitter(); var jpCount = 5; //conn.query(“select * from giftinfo” , function(row){ })
x.on('lingjiang’,lingjiangHandle); function lingjiang(user) { if (jpCount > 0) x.emit('lingjiang’, user); else { console.log(‘奖品已领玩’); } }
var lingjiangHandle = function(user) { jpCount–; if (lingjiangSucceed) { console.log(user + ‘领奖成功’); } else { console.log(user + ‘领奖失败’); jpCount++; } }