-1
私はWebアプリケーションのnode.jsバックエンドをビルドしています。フォームを送信すると、私はさまざまなバリデーションを行います。そのうちの一つは、招待状はすでに同じメールアドレスで存在しているかどうかを確認することです。私はこれを呼び出すときしかし、私は応答がその速くないと思いますし、それを、jsのif文の中で結果を待つ方法は?
私はこの機能を作成した(は機能をisUserAlreadyInvited)チェックがtrueを返しても次のステートメントに移ります。ここではどのように
//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;
}
});
}
[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-非同期呼び出しからの応答) –
これは私の意見では素晴らしい答えではありませんので、コメントとして書いていますが、あなたの代わりに(!(isUserAlreadyInvited(email、user_id))))それ以外の仕事? –
@AldenBe 'isUserAlreadyInvited'は非同期関数であるため、いいえです。以前にリンクした質問を参照してください。 –