为什么我的代码片段在检索到结果后似乎没有进入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会记录电子邮件和" OUT OF SCOPE"和#34;出了点问题"但它永远不会成功或错误分支,任何想法?我无法弄清楚query.find()函数出了什么问题。
答案 0 :(得分:0)
您不需要 new 关键字来扩展对象。
var accountTest = new Parse.Object.extend("AccountTest");
应该是
var accountTest = Parse.Object.extend("AccountTest");
后面跟着你的其余代码,这是正确的。
此外,
var email = request.object.get("email");
以上行将从请求对象获取邮件字段。该对象尚未保存到DB中。所以,没有匹配的记录。因此,它不会进入查找块。如果您尝试使用已存在的电子邮件字段值保存对象,那么您的代码以及上述更改将起作用。
答案 1 :(得分:0)
我猜测AccountTest可能是用户对象。如果这是正确的,请尝试添加
Parse.Cloud.useMasterKey();
在执行查询之前。
答案 2 :(得分:0)
由于find
函数的异步性质!在beforeSave
函数完成更改之前,您的response.error
代码会触及最后一行find
。当您调用find
函数时,由于其异步性质,它会立即返回。它的回调只有在完成后才会被调用。如果您只删除最后一行response.error("Something went wrong");
,则您的功能应按预期工作。