3

我是 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;

}

4

1 回答 1

8

传入一个回调函数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 的 StackOverflow 问题

虽然这是一个架构决定 - 有些人更喜欢使用回调,特别是如果编写一个旨在供第 3 方重用的模块。(事实上​​,在采用 Promise 之类的东西之前,最好在学习阶段完全了解回调。)

于 2013-04-13T00:23:02.703 回答