Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Node.js中的回调函数获取返回值?_Javascript_Node.js - Fatal编程技术网

Javascript 如何从Node.js中的回调函数获取返回值?

Javascript 如何从Node.js中的回调函数获取返回值?,javascript,node.js,Javascript,Node.js,我正在使用Angular、NodeJS和MYSql 我需要在其他函数中获取mysql查询的返回值。有可能吗 就像下面的代码一样 我需要从其他函数的查询中获取详细信息,但无法获取用户地址的详细信息 有什么解决方案可以获取详细信息吗 多谢各位 exports.getUserDetails= (req, res) => { sql = 'SELECT * FROM users '; connection.query(sql, (error, results, fileds) =&

我正在使用Angular、NodeJS和MYSql

我需要在其他函数中获取mysql查询的返回值。有可能吗

就像下面的代码一样

我需要从其他函数的查询中获取详细信息,但无法获取用户地址的详细信息

有什么解决方案可以获取详细信息吗

多谢各位

exports.getUserDetails= (req, res) => {
    sql = 'SELECT * FROM users ';
    connection.query(sql, (error, results, fileds) => {
        if(error) {
            res.send({
                "success" : false,
                "message" : "Error : "+error.message
            });
        }
        else {
            if(results.length >0) { 
                let users = [];
                results.forEach(user => {
                    let addressDetas = this.getUserAddress(user.id);
                    let userdata = {}
                    userdata = user;
                    userdata.address = addressDetas; 
                    users.push(userdata);
                });
                res.send({
                    "success" : true,
                    "message" : "No Record ",
                "result" : users
                });
            }
            else {
                res.send({
                    "success" : true,
                    "message" : "No Record ",
                    "result" : results
                });
            }
        }
    });
}

exports.getUserAddress= (userid) => {
sql = 'SELECT * FROM address WHERE user_id = "'+userid+'" ';
    connection.query(sql, (error, results, fileds) => {
        if(error) {
            return error;
        }
        else {
            return results;
        }
    });
}
返回的不是getUserAddress,而是传入connection.query的回调。如果希望捕获查询结果,则需要按照惯例将自己的回调函数作为最后一个参数传递给getUserAddress。但是,有一些重要的语法特性可以帮助您以更同步的样式编写代码,特别是Promise和async以及await关键字。如果你用这些重写你的函数,你将能够按照你的意愿使用它。比如:

const until = require ('util'):

exports.getUserAddress = async function (userId) {
  const SQL = select etc....'';
  const query = until.promisify(connection.query);
  return await query(sql,);
}
然后像这样使用它:

async function printAddress() {
  const address =await getUserAddress(123);
  console.log(address);
}

在编写代码时,您可能会考虑使用一致的缩进——这将使阅读和调试变得更容易,不仅对于潜在的回答者,而且对您来说,当我们都能一目了然地看到{}块和嵌套级别时,而不是必须仔细地选择每一行来拾取逻辑路径。