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

时间:2015-11-23 11:09:03

标签: javascript parse-platform

为什么我的代码片段在检索到结果后似乎没有进入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()函数出了什么问题。

3 个答案:

答案 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");,则您的功能应按预期工作。