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

标签 javascript node.js asynchronous

我是 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 的回调内部调用该回调函数:

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 的使用。我觉得我无法对这些正义做出解释,所以我会链接到这个 StackOverflow question about understanding Promises .

虽然这是一个架构决定 - 有些人更喜欢使用回调,尤其是在编写一个旨在供第 3 方重用的模块时。 (事实上​​ ,在采用 Promise 之类的东西之前,在这里的学习阶段最好让你的头脑完全围绕回调。)

关于javascript - Nodejs异步数据库功能需要同步应答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15982788/

相关文章:

JavaScript - 无法获取/api/列表

json - 如何在 mongodb 更新调用中覆盖整个 json 文档

ios - 为什么 swift GCD 不能在 tableview cell imageView 中工作

Javascript 字符串到嵌套数组

javascript - 自动排序和调整图片库中的图像

node.js - 我无法运行 ionic 服务

node.js - 我可以检查异步函数是否正在运行吗?

asp.net-mvc - 异步 MVC 操作的工作线程从何而来?

javascript - 如何在不使用 Bootstrap 的情况下使隐藏/显示按钮出现在单个输入中

javascript - 如何在 openSUSE 上使用 NGINX 或 Apache2 将端口 80 重新路由到 localhost :3000 so I can run my Node. js 应用程序