Javascript Nodejs异步数据库功能需要同步应答

Javascript Nodejs异步数据库功能需要同步应答,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我是nodejs新手,正在编写一些代码,需要查询我的MySQL数据库并从给定的用户id返回用户名。我一直在阅读您的所有函数都应该是异步的。在这种情况下,理想情况下,我希望服务器能够在执行此查询时响应其他事件请求。但是,它不是一个特别大的查询,只返回一个值。也许我应该让它同步?(如果这是您的答案,那么更改它的示例代码将非常棒)无论如何,这是我的函数。它在最后一行“return current_username;”附近给出了一个错误,因为此时current_username未定义。有什么建议吗 fu

我是nodejs新手,正在编写一些代码,需要查询我的MySQL数据库并从给定的用户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;

}将回调函数传递给
获取当前用户名
,然后从
连接内部调用该回调函数。查询
的回调:

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);
});
您还可以查看承诺/未来的使用。我有一种感觉,我无法解释这些正义,所以我将链接到这个


但这是一个体系结构决策——有些人更喜欢使用回调,尤其是在编写供第三方重用的模块时。(事实上,在学习阶段,在采用类似于承诺的方法之前,最好让你的头脑完全集中在回调上。)

只是为了消除你的坏想法:在node中,答案永远不会是“使其同步”。