Ich baue ein node.js Backend für eine Webapp und wenn ich ein Formular abschicke, mache ich verschiedene Validierungen. Einer von ihnen ist bereits, wenn eine Einladung mit der gleichen E-Mail-Adresse existiert zu überprüfen. (isUserAlreadyInvited Funktion)Wie auf Ergebnisse innerhalb einer if-Anweisung in js warten?
ich eine Funktion dafür geschaffen, aber wenn ich das nennen, ich denke, die Antwort nicht so schnell ist und es bewegt sich nur zur nächsten Anweisung, selbst wenn der Test wahr zurückgibt. Wie
//Loop through emails one by one
var emails_to_invite = ["[email protected]","invalid.com"];
var response_items = [];
async.each(emails_to_invite,
function(email, callback){
//Response item
var response_item = {}
response_item.email = email;
//Validate
if(Joi.validate({ email: email }, apiSchema).error) {
response_item.error = "not valid email";
response_items.push(response_item);
callback();
} else if(email == user.email) {
response_item.error = "Sending an invitation to your own email is kinda dumb";
response_items.push(response_item);
callback();
} else if(isUserAlreadyInvited(email,user_id)) {
response_item.error = "already invited";
response_items.push(response_item);
callback();
} else {
sendInvitationEmail(email,user_id,null,null,function(invitation_code){
if(invitation_code) {
response_item.invitationCode = invitation_code;
} else {
response_item.error = "server error";
}
response_items.push(response_item);
callback();
});
};
},
function(err){
//Return response
res.status(200).send(response_items);
}
);
function isUserAlreadyInvited(email,invited_by) {
User.findOne({
email: email,
invited_by: invited_by
}, function(err, user) {
if(err) {
return false;
} else {
return true;
}
});
}
Mögliche Duplikat von [Wie gebe ich die Antwort von einem asynchronen Aufruf zurück?] (Http://stackoverflow.com/questions/14220321/how-do-i-return- the-response-from-async-anruf) –
Das ist meiner Meinung nach keine gute Antwort also schreibe ich es als Kommentar, würde aber sonst wenn (! (isUserAlreadyInvited (email, user_id))) statt deiner sonst arbeiten? –
@AldenBe Nein, weil 'isUserAlreadyInvited' eine asynchrone Funktion ist. Siehe die Frage, mit der ich zuvor verbunden war. –