如何在js中等待if语句内部的结果

How to wait for results inside an if statement in js?

本文关键字:语句 内部 结果 if 等待 js      更新时间:2023-09-26

我正在为web应用程序构建node.js后端,当我提交表单时,我会进行各种验证。其中之一是检查是否已经存在具有相同电子邮件地址的邀请。(isUserAlreadyInvited函数)

我为此创建了一个函数,但当我调用它时,我想响应并没有那么快,即使检查返回true,它也会移动到下一个语句。如何

    //Loop through emails one by one
    var emails_to_invite = ["test@test.com","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;
            }
        });
    }

这里有两个返回:

function isUserAlreadyInvited(email,invited_by) {
        User.findOne({
            email: email,
            invited_by: invited_by
        }, function(err, user) {
            if(err) {
                return false;
            } else {
                return true;
            }
        });
    }

在该功能中定义

    function(err, user) {
            if(err) {
                return false;
            } else {
                return true;
            }
        }

并且与返回值CCD_ 1无关。

显然,您的isUserAlreadyInvited()是一个异步函数,需要异步处理——它应该将回调函数作为参数。应调用该回调来代替function(err, user) {}