2015-10-21 29 views
0

我正在創建一個iOS應用程序,並且我正在爲我的後端使用Parse。 該應用程序實質上使人們能夠挑戰朋友睡眠超過x小時。未在解析CloudCode中運行的嵌套查詢

我正在寫我的處理函數(「betWinner3」),它應該計算下注/挑戰的勝者。詳細信息如下: 我正在查詢基於objectId的投注,我在比較「betTime」和「hoursSlept」。從此查詢中,我還在「better」下記錄用戶名,在「sleeper」下記錄用戶名。如果 - else語句計算三種可能的情況。在每個條件/場景下,我向「用戶」類別提出兩個其他查詢,以更新「更好」和「睡眠者」的分數。

當我運行代碼時,我的函數成功運行,它得到了if-else語句,但它不會等待我的兩個其他查詢來吐出它們的結果。

任何幫助解決這個問題,將不勝感激。我新接觸Javascript和解析。由於

代碼:

Parse.Cloud.define("betWinner3", function(request,response){ 

    var objectId=request.params.objectId; 
    var query=new Parse.Query("betClass"); 
    query.equalTo("objectId",objectId); 
    query.first({ 

     success:function(bet){ 

      var better=bet.get("better"); 
      var sleeper=bet.get("sleeper"); 
      console.log('start!!!'); 

      if (parseInt(bet.get("betTime")) < parseInt(bet.get("hoursSlept"))){ 
       console.log('sleeper wins'); 
       var queryUser= new Parse.Query(Parse.User); 
       queryUser.equalTo("username",better); 
       queryUser.first({ 
        sucess:function(user){ 
         var userPoints=parseInt(user.get("points")); 
         userPoints ++; 
         userBetPoints=userPoints.toString(); 
         user.set("points",userBetPoints); 
         console.log("111111111111"); 
         user.save(); 
         response.success("Success Message"); 

        }, 
        error:function(error){ 
         response.error("Error Message"); 
        } 
       }); 

       console.log('sle'); 
       var queryUser= new Parse.Query(Parse.User); 
       queryUser.equalTo("username",sleeper); 
       queryUser.first({ 
        sucess:function(user){ 
         var userPoints=parseInt(user.get("points")); 
         userPoints ++; 
         userBetPoints=userPoints.toString(); 
         user.set("points",userBetPoints); 
         console.log("22222222222"); 
         user.save(); 
         response.success("Success Message"); 

        }, 
        error:function(error){ 
         response.error("Error Message"); 
        } 
       }); 

      } 

      else if (parseInt(bet.get("betTime")) === parseInt(bet.get("hoursSlept"))){ 
       console.log('tiessssss'); 
       var queryUser= new Parse.Query(Parse.User); 
       queryUser.equalTo("username",better); 
       queryUser.first({ 
        sucess:function(user){ 
         var userPoints=parseInt(user.get("points")); 
         userPoints ++; 
         userBetPoints=userPoints.toString(); 
         user.set("points",userBetPoints); 
         console.log("333333333333"); 
         user.save(); 
         response.success("Success Message"); 

        }, 
        error:function(error){ 
         response.error("Error Message"); 
        } 
       }); 

       console.log("lol"); 
       var queryUser= new Parse.Query(Parse.User); 
       queryUser.equalTo("username",sleeper); 
       queryUser.first({ 
        sucess:function(user){ 
         var userPoints=parseInt(user.get("points")); 
         userPoints +=0; 
         userBetPoints=userPoints.toString(); 
         user.set("points",userBetPoints); 
         console.log("4444444"); 
         user.save(); 
         response.success("Success Message"); 

        }, 
        error:function(error){ 
         response.error("Error Message"); 
        } 
       }); 

      } 

      else { 
       console.log("better wins"); 
       var queryUser= new Parse.Query(Parse.User); 
       queryUser.equalTo("username",better); 
       console.log("You are in"); 
       queryUser.first({ 
        sucess:function(user){ 
         var userPoints=parseInt(user.get("points")); 
         userPoints +=2; 
         userBetPoints=userPoints.toString(); 
         user.set("points",userBetPoints); 
         console.log("55555555"); 
         user.save(); 
         console.log("aaaaaaa"); 
         response.success("Success Message"); 

        }, 
        error:function(error){ 
         response.error("Error Message"); 
        } 
       }); 

       var u=0; 
       for(i=0; i<1000000;i++){ 
       u=i; 
       } 

       console.log("lmfao"); 
       var queryUser= new Parse.Query(Parse.User); 
       queryUser.equalTo("username",sleeper); 
       queryUser.first({ 
        sucess:function(user){ 
         var userPoints=parseInt(user.get("points")); 
         userPoints --; 
         userBetPoints=userPoints.toString(); 
         user.set("points",userBetPoints); 
         console.log("6666666"); 
         user.save(); 
         console.log("bbbbbbbb"); 
         response.success("Success Message"); 

        }, 
        error:function(error){ 
         response.error("Error Message"); 
        } 
       }); 

      } 


      console.log("wiiiiiiiiiiiiiii"); 
      response.success("Success Message %%%%%%%"); 

     }, 
     error:function(error){ 
      response.error("Error Message"); 
     } 
    }); 
}); 

回答

0

的問題是,response.success()是讓你的完整嵌套查詢之前調用。

具體而言,只要第一次查詢返回,就會調用這些行。

console.log("wiiiiiiiiiiiiiii"); 
response.success("Success Message %%%%%%%"); 

只要調用success,函數就會結束。您可以通過將success調用專門在嵌套查詢中解決此問題。或者更好的是,看看Parse如何實現Promises他們真的可以幫助組織你的代碼。