我想让我的应用的用户只增加一次value
。以下代码失败,因为mongoose中的update
是异步的。对于此api的下一个连续请求,我的检查if(user.valueIncremented)
失败,因为此时valueIncremented
尚未更新,但它将在下一个事件循环中进行更新。所以,我该怎么办,好先生?
var Account = new Schema({
_id: Schema.Types.ObjectId,
value: {type: Number, default: 0},
valueIncremented: {type: Boolean, default: false}
});
router.post('/incrementValue', function(req, res, next) {
var user = req.user;
if(user.valueIncremented) {
return next();
}
else {
incrementValue();
}
function incrementValue(){
var condition = {
_id: user._id;
}
var update = {
$inc: {
value: 1
},
$set: {
valueIncremented: true
}
}
Account.update(condition, update).exec();
}
})

答案 0 :(得分:0)
这里我向数据库添加了一个额外的查询。现在,当我对此api进行两次或更多次连续调用时,value
仅增加一次。
router.post('/incrementValue', function(req, res, next) {
var id = req.user._id;
Account.findById(id).exec(function(err, user){
if(err) {
return next(err);
}
if(user.valueIncremented) {
return next();
}
else {
incrementValue();
}
function incrementValue(){
var condition = {
_id: id
}
var update = {
$inc: {
value: 1
},
$set: {
valueIncremented: true
}
}
Account.update(condition, update).exec();
}
})
})