2016-08-15 3 views
0

Lors de l'ajout d'une adresse e-mail à une liste, je souhaite enregistrer une fonction beforeSave dans mon code cloud si l'adresse appartient à un utilisateur existant. Si ce n'est pas le cas, je voudrais arrêter l'appel de sauvegarde et renvoyer une réponse d'erreur à mon application mobile.Parse Cloud Code beforeSave timeout

Lorsque j'exécute le code ci-dessous, je n'ai aucun problème lors de la saisie d'une adresse e-mail valide. Dès que j'entre une adresse invalide, la fonction beforeSave entre dans un tizzy et expire après un certain temps, renvoyant une charge d'ordures au client.

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"); 
    }); 
}); 

Quand je lance ce avec une adresse e-mail valide, je ne reçois que les premiers appels CONSOLE.LOG signalés à ma console - aucun des autres sont visibles. J'utilise mon serveur d'analyse sur Heroku.

Répondre

0

L'exécutez-vous sur parse.com ou sur votre propre backend mongo db?

Dans tous les cas, votre problème est que l'e-mail n'est probablement pas indexé et effectue donc une analyse de table complète. Si c'est votre propre backend, vous pouvez mettre un index sur le courrier électronique dans la collection.

Si vous utilisez votre propre DB, je ne sais pas si quelqu'un l'a déjà fait (je ne l'ai pas encore fait, mais je devrais le faire), mais vous pouvez probablement aussi mettre une contrainte unique sur le courrier électronique. la promesse rejetée sur user.save() et ne vous inquiétez pas du hook beforeSave.