解析云代码:beforeSave查询返回代码不起作用



有什么想法吗?为什么在检索到结果后,我的代码片段似乎没有进入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");

上面的行将从请求对象中获取邮件字段。该对象尚未保存到数据库中。因此,没有匹配的记录。因此,它不会进入查找块。如果您尝试保存一个具有已存在的电子邮件字段值的对象,那么您的代码以及上述更改将起作用。

最新更新