Parse CloudCode 中的嵌套查询不是 运行
Nested queries not running in Parse CloudCode
我正在创建一个 iOS 应用程序,我正在为我的后端使用 Parse。
该应用程序实质上使人们能够挑战朋友的睡眠时间超过 x 小时。
我正在编写我的处理函数 ("betWinner3"),它应该计算 bet/challenge 的获胜者。详情如下:
我正在查询基于 objectId 的投注,我正在比较 "betTime" 和 "hoursSlept"。从这个查询中,我还记录了 "better" 下的用户名和 "sleeper" 下的用户名.If - else 语句计算三种可能的情况。在每个 condition/scenario 中,我对 "User" class 进行了另外两个查询,以更新 "better" 和 "sleeper".
的点
当我 运行 代码时,我的函数 运行 成功并进入 if-else 语句,但它不会等待我的其他两个查询吐出它们的结果。
如能帮助解决问题,我们将不胜感激。我是 Javascript 和 Parse 的新手。谢谢
代码:
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");
}
});
});
问题是 response.success()
在您的嵌套查询完成之前被调用。
具体来说,这些行会在您第一次查询时立即调用 returns。
console.log("wiiiiiiiiiiiiiii");
response.success("Success Message %%%%%%%");
一调用success
,函数就结束了。您可以通过将 success
调用移到嵌套查询中来解决此问题。或者更好的是,看看 Parse 是如何实现的 Promises 它们确实可以帮助组织您的代码。
我正在创建一个 iOS 应用程序,我正在为我的后端使用 Parse。 该应用程序实质上使人们能够挑战朋友的睡眠时间超过 x 小时。
我正在编写我的处理函数 ("betWinner3"),它应该计算 bet/challenge 的获胜者。详情如下: 我正在查询基于 objectId 的投注,我正在比较 "betTime" 和 "hoursSlept"。从这个查询中,我还记录了 "better" 下的用户名和 "sleeper" 下的用户名.If - else 语句计算三种可能的情况。在每个 condition/scenario 中,我对 "User" class 进行了另外两个查询,以更新 "better" 和 "sleeper".
的点当我 运行 代码时,我的函数 运行 成功并进入 if-else 语句,但它不会等待我的其他两个查询吐出它们的结果。
如能帮助解决问题,我们将不胜感激。我是 Javascript 和 Parse 的新手。谢谢
代码:
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");
}
});
});
问题是 response.success()
在您的嵌套查询完成之前被调用。
具体来说,这些行会在您第一次查询时立即调用 returns。
console.log("wiiiiiiiiiiiiiii");
response.success("Success Message %%%%%%%");
一调用success
,函数就结束了。您可以通过将 success
调用移到嵌套查询中来解决此问题。或者更好的是,看看 Parse 是如何实现的 Promises 它们确实可以帮助组织您的代码。