我想要达到的目标似乎很基本,但是我无法解决这个问题。
我在数据库中存储了这样构建的用户库存;
id, userid, item, status
id: identifier of row
userid: unique identifier of user
item: unique identifier of item
status: 0 or 1, where 0 means no longer in the inventory and 1 active
现在,当用户在我的网站上出售该商品时(例如,将其发送给垃圾邮件),结果是该商品被多次出售,因为该行尚未更新,并且连续的请求也得到了批准。
这是我的代码的简短可读示例;
function sell(uid, item){
database.query('SELECT * FROM inventories WHERE user = ' + uid + ', item = ' + item).then((row) => {
var item = row[0];
//Check if the item is still in the user is inventory
if(item.status !== 1){
console.log('Found item is no longer in the user his inventory, item cannot be sold.');
return;
}
//Remove the item form the inventory
database.query('UPDATE inventories SET status = 0 WHERE item = ' + item);
}).catch((err) => { console.log(err); })
}
我想这样做,以便在执行此代码时不再能将商品的行写入其中,这样就没人能卖出一件商品了,我认为这是很平常的事,尽管我不太确定如何获得此结果。