Mik*_*e V 6 javascript parse-platform
我为Parse Framework编写了一个异步云后台作业,根据"@"符号之前的电子邮件为每个用户生成一个显示用户名.不幸的是,当我运行这份工作时,我收到的错误是"计算操作太多".有没有办法让查询和保存串联运行而不是并行运行?我在文档中看到了promises的可能性,但我对如何使它与嵌套查询一起工作感到困惑.
Parse.Cloud.job("generateUsernameForEveryUser", function(request, status) {
// Set up to modify user data
Parse.Cloud.useMasterKey();
var counter = 0;
// Query for all users
var query = new Parse.Query(Parse.User);
query.each(function(user) {
createUsernameForUser(user, 0, {
success: function(username) {
if(username == null) {
status.error();
} else {
user.set("displayUsername", username);
user.set("displayUsernameUppercase", username.toUpperCase());
user.save();
}
},
error: function(error) {
status.error("Error: " + error.message);
}
});
}).then(function() {
// Set the job's success status
status.success("Username generation completed successfully.");
}, function(error) {
// Set the job's error status
status.error("Uh oh, something went wrong.");
});
});
function createUsernameForUser(user, count, callback) {
var generatedUsername = user.getEmail().substring(0, user.getEmail().indexOf("@"));
if(count > 0) {
//Quotes added to ensure no math is done between generatedUsername and count
generatedUsername = "" + generatedUsername + "" + count;
}
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo("displayUsernameUppercase", generatedUsername.toUpperCase());
userQuery.count({
success: function(userCount) {
if(userCount > 0) {
createUsernameForUser(user, count + 1, {
success : function(responseUsername) {
callback.success(responseUsername);
},
error: function(error) {
callback.error(error.message);
}
});
}
else {
callback.success(generatedUsername);
}
},
error: function(error) {
console.log("Error trying to count users: " + error.message);
callback.error("Error trying to count users: " + error.message);
}
});//End of userQuery call
}
Run Code Online (Sandbox Code Playgroud)
小智 0
这是一个很晚的答案,但对经历这个问题的人会有帮助。
too many count operations返回错误,因为仅当该类的数据为 100 行或更少时,query.each 才会起作用。
我们可以通过如下方式实现相同的要求:
var users = new Array();
.... push all the created user objects to users ....
Parse.Object.saveAll(users); //save the list -希望这能解决。
| 归档时间: |
|
| 查看次数: |
2709 次 |
| 最近记录: |