2017-02-23 3 views
0

작동하지 않습니다 내부에 나는이 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 
       }); 

     }); 

    }); 
}); 

것은이 베팅 객체가 업데이트되지 않은 것입니다, 그 둘을 console.log 이전 개체를 인쇄합니다. 이 경우 베팅을 어떻게 저장할 수 있습니까? 그 사이에 User 객체가 업데이트되었습니다. 이상합니다.

bet.save(function (err, bet) { 
    if (err){ console.log(err); } 
    console.log('saved bet: ', bet); 
    // place for other code after save operation.. 
}); 

약속 반환 사용 :

답변

0

나는, 당신은 함수가 두 가지 방법이 있습니다, 저장 작업 이후에 호출 할 정의해야합니다 첫 번째 생각 이상

bet.save().then(function (bet) { 
     console.log('saved bet: ', bet); 
     // place for other code after save operation.. 
    }); 

을 세부 정보 및 예 : mongoosejs.com/docs/api.html#model_Model-save

+0

친절 하 고 정교 하 게 * how * and * why * this는 thew OP 질문을 해결할 것입니까? –

+0

그의 경우에는 베팅이 저장 될 때까지 기다리지 않기 때문에 작동하지 않았습니다. http://mongoosejs.com/docs/api.html#model_Model-save를 참조하십시오. 내 예제에서는 저장 한 약속 저장 - 베팅 저장을 사용합니다. –

+0

대답을 편집 할 수 있다면 좋을 것 같습니다. –

0

시험해보기 ...

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 
      }); 

     }); 


    }); 

이전 쿼리의 콜백에서 마지막 몽구스 쿼리를 중첩합니다. 이렇게하면 마지막 쿼리 이전에 .save가 실행됩니다.