2016-08-15 87 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鉤子。