Reputation: 1369
I have this code on API:
var data = (req.method == 'POST') ? req.body : req.query;
if (!data.betId || !data.userId) return res.apiError('wrong request payload');
BetUser.model.findOne({bet: data.betId, user: data.userId}).exec(function(err, bets){
if (bets){
return res.apiError('you placed the bet for this bet', bets);
}
var bet_item;
item = new BetUser.model({bet: data.betId, user: data.userId});
item.getUpdateHandler(req).process(data, function(err) {
if (err) return res.apiError('error', err);
Bet.model.findById(data.betId).exec(function(err, bet){
if (err) return res.apiError('database error', err);
switch(parseInt(item.betChoice)){
case 0:
bet.drawTeamBets +=1;
break;
case 1:
bet.firstTeamBets +=1;
break;
case 2:
bet.secondTeamBets +=1;
break;
};
bet.drawTeamBets = 1000;
console.log(bet);
bet.save();
console.log(bet);
bet_item = bet;
});
User.model.findById(data.userId).exec(function(err, user){
if (err) return res.apiError('database error', err);
user.gold -= item.betAmount;
user.save();
res.apiResponse({
bet_detail : item,
user : user,
bet : bet_item
});
});
});
});
The thing is that the Bet object wasn't updated, those 2 console.log print the old object. How can i save the bet in this case? meanwhile the User object was updated. So strange.
Upvotes: 0
Views: 983
Reputation: 21
Try this...
Bet.model.findById(data.betId).exec(function(err, bet){ if (err) return res.apiError('database error', err);
switch(parseInt(item.betChoice)){
case 0:
bet.drawTeamBets +=1;
break;
case 1:
bet.firstTeamBets +=1;
break;
case 2:
bet.secondTeamBets +=1;
break;
};
bet.drawTeamBets = 1000;
console.log(bet);
bet.save();
console.log(bet);
bet_item = bet;
User.model.findById(data.userId).exec(function(err, user){
if (err) return res.apiError('database error', err);
user.gold -= item.betAmount;
user.save();
res.apiResponse({
bet_detail : item,
user : user,
bet : bet_item
});
});
});
Nest your last mongoose query in the callback of the previous query. This will ensure the .save fires before the last query.
Upvotes: 0
Reputation: 89
I think you must define a function to be called after the save operation, there are two ways to do that, first one:
bet.save(function (err, bet) {
if (err){ console.log(err); }
console.log('saved bet: ', bet);
// place for other code after save operation..
});
Using returned Promise:
bet.save().then(function (bet) {
console.log('saved bet: ', bet);
// place for other code after save operation..
});
for more details and examples: mongoosejs.com/docs/api.html#model_Model-save
Upvotes: 0