Node.js 函数调用时返回未定义的

Node.js 函数调用时返回未定义的,node.js,Node.js,以下是我的职责: function searchAccessToken(emailAddress){ var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'"; console.log(sql); var token = ""; db(function(err,conn){ conn.query(sql, function(err,

以下是我的职责:

function searchAccessToken(emailAddress){
    var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'";
    console.log(sql);
    var token = "";
    db(function(err,conn){
        conn.query(sql, function(err,results){
            if(err){
                conn.release();
                throw err;
            }else if(results.length){
                conn.release();
                token = results[0].accessToken;
                return token;
            }else{
                conn.release();
                return token;
            }
        });
    });
}
var userAccessToken = searchAccessToken(name);
这就是我调用函数的方式:

function searchAccessToken(emailAddress){
    var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'";
    console.log(sql);
    var token = "";
    db(function(err,conn){
        conn.query(sql, function(err,results){
            if(err){
                conn.release();
                throw err;
            }else if(results.length){
                conn.release();
                token = results[0].accessToken;
                return token;
            }else{
                conn.release();
                return token;
            }
        });
    });
}
var userAccessToken = searchAccessToken(name);
但是,当我尝试调试时,
userAccessToken
返回未定义的,它应该返回一个
字符串

编辑:(但仍然不起作用)。添加了回调,但仍然不起作用

function searchAccessToken(emailAddress){
    var sql = "SELECT accessToken FROM device WHERE email_address = '" + emailAddress + "'";
    console.log(sql);
    var token = "";
    db(function(err,conn,callback){
        conn.query(sql, function(err,results){
            if(err){
                conn.release();
                return callback(err);
            }else if(results.length){
                conn.release();
                token = results[0].accessToken;
                return callback(token);
            }else{
                conn.release();
                return callback(token);
            }
        });
    });
}

在这种情况下,您应该使用callback、promise或async wait的可能重复项。searchAccessToken()返回未定义,因为它不等待conn.queryI替换的返回令牌返回回调(令牌)的结果;但它仍然没有定义你还没有理解这个问题
searchAccessToken
是需要接受并传递回调的函数。您不能仅使传递给
db
的函数具有第三个参数。