Javascript 如何从Node.js中的回调函数获取返回值?
我正在使用Angular、NodeJS和MYSql 我需要在其他函数中获取mysql查询的返回值。有可能吗 就像下面的代码一样 我需要从其他函数的查询中获取详细信息,但无法获取用户地址的详细信息 有什么解决方案可以获取详细信息吗 多谢各位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) =&
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);
}
在编写代码时,您可能会考虑使用一致的缩进——这将使阅读和调试变得更容易,不仅对于潜在的回答者,而且对您来说,当我们都能一目了然地看到{}块和嵌套级别时,而不是必须仔细地选择每一行来拾取逻辑路径。