nodejs 异步 mysql,异步的NodeJS数据库功能需要同步答案

这篇博客讨论了在Node.js中查询MySQL数据库时,从同步到异步编程的转变。作者遇到的问题是尝试从用户ID获取用户名时,由于查询是异步的,导致返回的`current_username`为undefined。解决方案是使用回调函数来处理异步查询的结果,确保在返回用户名之前等待查询完成。示例代码展示了如何修改原始同步函数以实现异步操作,并建议进一步学习Promise来优化异步处理。
摘要由CSDN通过智能技术生成

I am new to nodejs and am writing some code that needs to query my MySQL database and return a username from a given user_id. I've been reading that all your functions should be asynchronous. In this case, ideally I would like the server to be able to respond to other event requests while this query is taking place. However, it isn't a particularly large query and only returns a single value. Maybe I should make it synchronous? (If that is your answer, sample code to change it would be great) Anyways, here is my function. It gives an error near the last line "return current_username;" because current_username is undefined at that point. Any suggestions?

function get_current_username(current_user_id) {

console.log(' | Entered get_current_username');

sqlq = 'SELECT username FROM users WHERE id = ' + current_user_id;

connection.query(sqlq, function(err, rows, fields) {

if (err) throw err;

var current_username = rows[0].username;

console.log(' | the current_username =' + current_username);

});

return current_username;

}

解决方案

Pass in a callback function to get_current_username and then call that callback function from inside of connect.query's callback:

function get_current_username(current_user_id, callback) {

console.log(' | Entered get_current_username');

sqlq = 'SELECT username FROM users WHERE id = ' + current_user_id;

connection.query(sqlq, function(err, rows, fields) {

if (err) throw err;

var current_username = rows[0].username;

console.log(' | the current_username =' + current_username);

callback(current_username);

});

}

When you go to use this function then, you'd do something like:

get_current_username(12345, function(username) {

console.log("I am " + username);

});

You could also check out the use of promises/futures. I have a feeling I won't be able to do an explanation of these justice, so I'll link off to this StackOverflow question about understanding Promises.

This is an architectural decision though - some people would prefer to use callbacks, especially if writing a module intended for re-use by 3rd parties. (And in fact, it's probably best to get your head fully wrapped around callbacks in the learning stages here, before adopting something like Promise.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值