我正在解析中创建一个新的CloudCode函数,以检索数据库中的用户总数。我设法做到这一点:
Parse.Cloud.define("getUsers", function(request, response) {
var users = Parse.Object.extend("_User");
var query = new Parse.Query(users);
query.find({
success: function(numberOfUsers) {
response.success(numberOfUsers.length);
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
});
现在,我想使用总用户数在我的Parse用户中设置参数。我想定义一个私有函数(与上面显示的函数几乎相同)返回该数字,以便我可以在我的其他云函数中调用它,如下所示:
Parse.Cloud.define("signUp", function(request, response) {
var user = new Parse.User();
user.set("username", request.params.username);
user.set("password", request.params.password);
//setting empty fields
...
user.set("alias", "user#" + numberOfUsers());
user.signUp(null, {
success: function(user) {
response.success(user);
},
error: function(user, error) {
alert("Error: " + error.code + " " + error.message);
}
});
});
function numberOfUsers() {
var users = Parse.Object.extend("_User");
var query = new Parse.Query(users);
query.find({
success: function(numberOfUsers) {
return numberOfUsers.length;
},
error: function(error) {
return 0;
}
});
}
但由于某种原因,这不起作用。函数numberOfUsers()返回空。我看到其他人也在私有函数中使用解析对象时遇到问题,我在Parse仪表板中找到了相同的问题而没有回答...... https://parse.com/questions/how-to-define-helper-method-in-cloud-code 谁知道如何实现这一目标?谢谢!
答案 0 :(得分:2)
这里的问题是query.find
以异步方式运行,因此即使查询尚未完成,它也会立即返回。还要记住,您可以在查询上设置的最大限制是1000个对象。
因此,一旦您的用户群增长到这个数字以上,您就必须翻阅结果,这可能需要 n 的时间。由于Cloud Code功能限制为最多运行15秒,这可能会成为后来的问题。
每次创建用户时,只要通过增加对象上的计数器列来跟踪用户数,就可以计算用户数,并在删除用户对象后减少用户数。
您可以在此处使用afterSave
和afterDelete
个钩子,更新计数器列,在getUsers
函数中只需返回该列的值。
现在你需要解决同步/异步问题,在这里你可以使用JavaScript Promises链接不同的操作并确保它们在一系列中运行。