nodejs异步数据库功能需要同步回答
Posted
技术标签:
【中文标题】nodejs异步数据库功能需要同步回答【英文标题】:Nodejs asynchronous database function needs synchronous answer 【发布时间】:2013-04-05 15:43:47 【问题描述】:我是 nodejs 的新手,正在编写一些代码,需要查询我的 mysql 数据库并从给定的 user_id 返回用户名。我一直在阅读您的所有功能都应该是异步的。在这种情况下,理想情况下,我希望服务器能够在此查询发生时响应其他事件请求。但是,它不是一个特别大的查询,只返回一个值。也许我应该让它同步? (如果这是您的答案,更改它的示例代码会很棒)无论如何,这是我的功能。它在最后一行“return current_username;”附近给出了一个错误。因为 current_username 在那一点上是未定义的。有什么建议吗?
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;
【问题讨论】:
只是为了打败你的坏主意:在节点中,答案是从不“让它同步”。 【参考方案1】:将回调函数传递给get_current_username
,然后从connect.query
的回调内部调用该回调函数:
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);
);
当你去使用这个函数时,你会做这样的事情:
get_current_username(12345, function(username)
console.log("I am " + username);
);
您还可以查看 promises/futures 的使用。我觉得我无法解释这些正义,所以我会链接到这个*** question about understanding Promises。
不过,这是一个架构决定——有些人更喜欢使用回调,尤其是在编写一个供第 3 方重复使用的模块时。 (事实上,在采用 Promise 之类的东西之前,最好在学习阶段完全了解回调。)
【讨论】:
以上是关于nodejs异步数据库功能需要同步回答的主要内容,如果未能解决你的问题,请参考以下文章