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

时间:2019-07-05 07:32:55

标签: javascript node.js

我正在使用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;
        }
    });
}

1 个答案:

答案 0 :(得分:0)

返回的不是getUserAddress,而是传递给connection.query的回调。如果要捕获查询结果,则需要将自己的回调函数(通常作为最后一个参数)传递给getUserAddress。但是,有重要的语法功能可帮助您以更具同步外观的方式编写代码,尤其是Promise以及asyncawait关键字。如果使用这些功能重写函数,则可以按预期使用它。像这样:

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);
}
相关问题