有什么想法吗?为什么在检索到结果后,我的代码片段似乎没有进入query.find()函数的分支?
Parse.Cloud.beforeSave("AccountTest", function(request, response) {
var email = request.object.get("email");
var accountTest = new Parse.Object.extend("AccountTest");
var query = new Parse.Query(accountTest);
console.log(email);
query.equalTo("email",email);
query.find({
success: function(results) {
console.log("checking");
if (results.length == 0) {
console.log("SUCCESS");
response.success();
}else{
console.log("FAIL");
response.error("E-mail has already been used");
}
console.log('no branch taken');
},
error: function() {
response.error("Something went wrong with the query");
}
});
console.log("OUT OF SCOPE")
response.error("Something went wrong");
});
parse.com上的日志记录了电子邮件、"超出范围"one_answers"出了问题",但它从未进入成功或错误分支,有什么想法吗?我不知道query.find()函数出了什么问题。
因为find
函数的异步性质!beforeSave
代码到达find
函数完成更改之前的最后一行response.error
。当您调用find
函数时,由于其异步性质,它会立即返回。它的回调只有在完成时才会被调用。如果您只是删除最后一行response.error("Something went wrong");
,那么您的函数应该按预期工作。
我猜AccountTest可能是用户对象。如果这是正确的,请尝试添加
Parse.Cloud.useMasterKey();
在执行查询之前。
您不需要new关键字来扩展Object。
var accountTest = new Parse.Object.extend("AccountTest");
应该是
var accountTest = Parse.Object.extend("AccountTest");
然后是代码的其余部分,这是正确的。
此外,
var email = request.object.get("email");
上面的行将从请求对象中获取邮件字段。该对象尚未保存到数据库中。因此,没有匹配的记录。因此,它不会进入查找块。如果您尝试保存一个具有已存在的电子邮件字段值的对象,那么您的代码以及上述更改将起作用。