2016-08-15 88 views
0

将电子邮件地址添加到列表时我想在我的云代码中检查beforeSave函数(如果地址属于现有用户)。如果没有,我想停止保存调用并将错误响应返回给我的移动应用程序。在保存超时之前解析云代码

当我运行下面的代码时,输​​入有效的电子邮件地址时没有问题。只要我输入了一个无效的地址,然而beforeSave函数会进入一段时间,并在一段时间后超时,将一堆垃圾返回给客户端。

Parse.Cloud.beforeSave("EventUsers", function(request, response) { 
    var email = request.object.get("email"); 
    console.log("starting beforeSave for user: " + email); 

    Parse.Cloud.useMasterKey(); 
    var userQuery = new Parse.Query(Parse.User); 
    userQuery.equalTo("email", email); 

    userQuery.first().then(function(user) { 
     console.log("user: " + user.get("email")); 
     if (user) { 
      console.log("User exists"); 
      response.success(); 
     } 
     console.error("No user with that email"); 
     response.error("199"); 
    }, function(error) { 
     console.error(error); 
     response.error("198"); 
    }); 
}); 

当我运行这一个无效的电子邮件地址,我只得到报告给我的控制台最先的console.log电话 - 没有其他人都出现了。

我在Heroku上运行我的分析服务器。

回答

0

你是在parse.com上还是在你自己的mongo db后端上运行这个?

在任何情况下,你的问题是,电子邮件可能没有索引,以便它是做一个全表扫描。如果它是您自己的后端,您可以在集合中添加电子邮件索引。

如果你运行你自己的数据库,不知道是否有人已经做到了,但(我还没有,但应该),但你可能也只是把唯一约束电子邮件,那么你可以简单地抓在user.save()上拒绝承诺,根本不用担心beforeSave钩子。