Node.js 为什么在节点模块中无法识别我的返回变量值

Node.js 为什么在节点模块中无法识别我的返回变量值,node.js,node-modules,return-value,Node.js,Node Modules,Return Value,我有一个节点文件,请求从另一个模块页面返回一个变量。所有数据函数都“工作”,但“返回查询”没有将查询值发送回我的初始请求,并且我的existingUser变量未定义。在控制台日志中,我在查询日志之前显示了existingUser日志检查。这就像等待请求被忽略一样 感谢您的帮助…我是这一切的新手 请求页面- const sqlRequests1 = require('./sqlAdmin/sqlRequests1'); . . . app.post('/', async (req, res) =&

我有一个节点文件,请求从另一个模块页面返回一个变量。所有数据函数都“工作”,但“返回查询”没有将查询值发送回我的初始请求,并且我的existingUser变量未定义。在控制台日志中,我在查询日志之前显示了existingUser日志检查。这就像等待请求被忽略一样

感谢您的帮助…我是这一切的新手

请求页面-

const sqlRequests1 = require('./sqlAdmin/sqlRequests1');
.
.
.
app.post('/', async (req, res) => {
            const { club, first_name, last_name, email, tel, address, post_code, password, passwordConfirmation} = req.body;
          
            let existingUser = await new sqlRequests1.Queries('contact',email).getAll();
            
            console.log(`existingUser is ${existingUser}`);  //THIS CONSOLE LOG RETURNS "undefined"
            
            if (existingUser) {
              return res.send('Email in use');
            }
          
            if (password !== passwordConfirmation) {
              return res.send('Passwords must match');
            }
          
            res.send('Account created!!!');
          });
模块页面-sqlRequests1

class Queries {
    constructor(table, selection) {
        this.table = table; 
        this.selection = selection; 
        
        console.log(selection);  //THIS DATA CHECK WORKS
        
        if(!table) {
            throw new Error('Need a table to connect to');
        };
        
    };
    
getAll() {
//Confirm if the emasil exists - if it does then give error message     
    let q = 'SELECT * FROM ?? ';
    
        connection.query(q, this.table, function (error, results,fields) {
        if (error) throw error;
        const query = (results[0].email);
        console.log(`query is ${query}`);  //THIS PROVIDES THE CORRECT DATA
        return query;  //THIS RETURN IS NOT GETTING BACK TO existingUser variable?
        });
};

};      
    
module.exports.Queries = Queries;

如果您想使用wait并阻止代码进一步移动,则必须转换get all函数以返回承诺

getAll() {
    new Promise((resolve,reject) => {
    //Confirm if the emasil exists - if it does then give error message     
        let q = 'SELECT * FROM ?? ';
    
        connection.query(q, this.table, function (error, results,fields) {
        if (error) reject(error);
        const query = (results[0].email);
        console.log(`query is ${query}`);  //THIS PROVIDES THE CORRECT DATA
        resolve(query)  //THIS RETURN IS NOT GETTING BACK TO existingUser variable?
        });
   })
}

承诺是前进的方向,但它只是错过了回报

getAll() {
    return new Promise((resolve,reject) => {  //ADDING return here fixed it
    //Confirm if the emasil exists - if it does then give error message     
        let q = 'SELECT * FROM ?? ';
    
        connection.query(q, this.table, function (error, results,fields) {
        if (error) reject(error);
        const query = (results[0].email);
        console.log(`query is ${query}`);  //THIS PROVIDES THE CORRECT DATA
        resolve(query)  //THIS RETURN IS NOT GETTING BACK TO existingUser variable?
        });
   })
}

下面的帖子展示了一些关于如何处理这种情况的建议:第二个答案(不是公认的答案)提供了最干净、最清晰的方法来处理代码。谢谢,但我仍然得到了未定义的返回/是的,我错过了返回。我认为它应该在放了返回声明后工作。返回新的承诺