Parse..com 云代码:尝试更新用户的列但没有任何反应
Parse..com cloud code: Trying to update user's column but nothing happens
我有一个后台工作,如果他们赢得了联赛,我会尝试用新余额更新用户余额
这些函数是被正确调用的辅助函数,但是 updateUserEarnings 函数中的 "query.first" 和 updateWinningsHelper 中的 "then" 函数从未被调用,至少日志中没有显示任何内容。是的,我是用户 masterkey。
var updateUserEarnings = function (User,prizeValue){
//var user = new Parse.User();
console.log("updateUserEarnings Called");
console.log("User Id: " + User.id);//Shown in log fi
console.log("PrizeValue " + prizeValue);//Shown in log file
var query = new Parse.Query(Parse.User);
query.equalTo("objectId",User.id);
return query.first({
success: function(result){
console.log("updateUserEarnings success");//Never Reached here
var balance;
if (result.get("cashBalance")){
balance = result.get("cashBalance");
}else{
balance = 0;
}
console.log("Current Balance "+ balance + " for "+result.get("DisplayUsername"));
balance = balance + prizeValue;
result.set("cashBalance",balance);
console.log("User " + result.get("DisplayUsername") + " Balance Updated : " + balance);
return result
},error:function(error){
console.log("user update error "+error);//never reached here as well
return error;
}
})
}
var updateWinningsHelper = function(index,lastIndex,record){
var winningObj = record.winningObject;
console.log("Winning object "+ JSON.stringify(winningObj));//Shown in log
console.log("Index : "+index + " lastIndex : "+lastIndex);//Shown in log
if (index < lastIndex){
updateUserEarnings(winningObj.get("User"), winningObj.get("League").get("PrizeValue")).then(
function(user){
console.log("Inside then function");//Never Reached
saveAllObjects.push(user);
},
function(error){
console.log("Error Happened "+error );//never reached
}
);
winningObj.set("LeagueWon",true);
winningObj.set("isRedeemed",true);
}else{
winningObj.set("LeagueWon",false);
}
index++;
winningObj.set("Rank",index);
return winningObj;
};
感谢任何帮助
事实证明,如果您已经从主查询中获得了用户指针,则无需再次查询。我在主查询中包含了用户列,我可以对该用户使用常规设置函数。
我所做的只是
var updateUserEarnings = function (User,prizeValue){
//var user = new Parse.User();
User.set("cashBalance", User.get("cashBalance")+prizeValue);
}
希望这对以后的任何人都有帮助,不要像我一样浪费 5 个小时。
很高兴您发现了问题!
在讨论该主题时,您可能希望研究消除因混合 javascript 编程范例而引起的任何混淆。您使用旧的回调范例以及更新的 Promises 进行异步操作,调试起来很麻烦。
Parse Engineering on JS Promises
我看了你的代码很长时间才意识到你是如何尝试执行查询的旧式回调,然后 return 从查询到调用函数的承诺,然后使用更新助手中的承诺回调。
我有一个后台工作,如果他们赢得了联赛,我会尝试用新余额更新用户余额
这些函数是被正确调用的辅助函数,但是 updateUserEarnings 函数中的 "query.first" 和 updateWinningsHelper 中的 "then" 函数从未被调用,至少日志中没有显示任何内容。是的,我是用户 masterkey。
var updateUserEarnings = function (User,prizeValue){
//var user = new Parse.User();
console.log("updateUserEarnings Called");
console.log("User Id: " + User.id);//Shown in log fi
console.log("PrizeValue " + prizeValue);//Shown in log file
var query = new Parse.Query(Parse.User);
query.equalTo("objectId",User.id);
return query.first({
success: function(result){
console.log("updateUserEarnings success");//Never Reached here
var balance;
if (result.get("cashBalance")){
balance = result.get("cashBalance");
}else{
balance = 0;
}
console.log("Current Balance "+ balance + " for "+result.get("DisplayUsername"));
balance = balance + prizeValue;
result.set("cashBalance",balance);
console.log("User " + result.get("DisplayUsername") + " Balance Updated : " + balance);
return result
},error:function(error){
console.log("user update error "+error);//never reached here as well
return error;
}
})
}
var updateWinningsHelper = function(index,lastIndex,record){
var winningObj = record.winningObject;
console.log("Winning object "+ JSON.stringify(winningObj));//Shown in log
console.log("Index : "+index + " lastIndex : "+lastIndex);//Shown in log
if (index < lastIndex){
updateUserEarnings(winningObj.get("User"), winningObj.get("League").get("PrizeValue")).then(
function(user){
console.log("Inside then function");//Never Reached
saveAllObjects.push(user);
},
function(error){
console.log("Error Happened "+error );//never reached
}
);
winningObj.set("LeagueWon",true);
winningObj.set("isRedeemed",true);
}else{
winningObj.set("LeagueWon",false);
}
index++;
winningObj.set("Rank",index);
return winningObj;
};
感谢任何帮助
事实证明,如果您已经从主查询中获得了用户指针,则无需再次查询。我在主查询中包含了用户列,我可以对该用户使用常规设置函数。
我所做的只是
var updateUserEarnings = function (User,prizeValue){
//var user = new Parse.User();
User.set("cashBalance", User.get("cashBalance")+prizeValue);
}
希望这对以后的任何人都有帮助,不要像我一样浪费 5 个小时。
很高兴您发现了问题!
在讨论该主题时,您可能希望研究消除因混合 javascript 编程范例而引起的任何混淆。您使用旧的回调范例以及更新的 Promises 进行异步操作,调试起来很麻烦。
Parse Engineering on JS Promises
我看了你的代码很长时间才意识到你是如何尝试执行查询的旧式回调,然后 return 从查询到调用函数的承诺,然后使用更新助手中的承诺回调。