我是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;
}
将回调函数传递给get_current_username,然后从connect.query的回调内部调用该回调函数:
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的问题)。
但是,这是一个体系结构决策- 有些人希望使用回调,尤其是在编写旨在供第三方重用的模块时。(实际上,在采用Promise之类的方法之前,最好在这里的学习阶段中全神贯注于回调。)