У меня есть этот код на API:KeystoneJS сохранить() внутри getUpdateHandler обратного вызова не работает
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
});
});
});
});
Дело в том, что объект Bet не был обновлен, те 2 console.log печати старый объект. Как я могу сохранить ставку в этом случае? в то время как объект User был обновлен. Так странно.
Будете ли вы настолько добрыми и продуманными * как * и * почему * это решает вопрос о OP? –
В его случае он не работал, потому что он не дождался, когда ставка будет сохранена, см. Http://mongoosejs.com/docs/api.html#model_Model-save. В моем примере используется сохранение, которое было возвращено. Обещание - ставка сохранена. –
Было бы здорово, если бы вы могли правильно отредактировать свой ответ. –