当前位置: 首页 > 面试题库 >

Node.js异步数据库功能需要同步回答

景昊焜
2023-03-14
问题内容

我是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的问题)。

但是,这是一个体系结构决策-
有些人希望使用回调,尤其是在编写旨在供第三方重用的模块时。(实际上,在采用Promise之类的方法之前,最好在这里的学习阶段中全神贯注于回调。)



 类似资料:
  • 问题内容: 我该如何做这项工作 我试图从异步之一获取同步功能,我需要它来使用FreeTds异步查询作为同步之一 问题答案: 使用deasync-用C ++编写的模块,它将Node.js事件循环暴露给JavaScript。该模块还公开了一个函数,该函数阻止后续代码,但不阻止整个线程,也不引起繁忙的等待。您可以将函数放入循环中:

  • 问题内容: 有大量的库可帮助修复回调综合症的层次。 实际上,太多了,我该使用哪一个? 问题答案: 我使用Async.js。 异步是一个实用程序模块,它提供直接,强大的功能来使用异步JavaScript。尽管最初设计用于node.js,但也可以直接在浏览器中使用。 例子

  • 我正在做一个函数(Java-Android),它应该返回一个由Firebase中的数据填充的对象列表。我的问题是,我需要在遍历for中的所有项目后将结果发送给监听器,看看代码: 我需要执行这一行:

  • 问题内容: 我有一个Node.js / Express应用程序,该应用程序查询路由内的MySQL数据库,并将结果显示给用户。我的问题是如何在将用户重定向到他们请求的页面之前运行查询并阻止直到两个查询都完成? 在我的示例中,我有2个查询需要在呈现页面之前完成。如果将查询2嵌套在查询1的“结果”回调中,则可以使查询同步运行。但是,当查询数量增加时,这将变得非常复杂。 如何在不将后续查询嵌套在先前查询的

  • 问题内容: 我已经将kriskowal的Q库用于一个项目(Web刮板/人类活动模拟器),并且熟悉了Promise,将其返回并解决/拒绝它们,并且该库的基本异步控制流方法和错误抛出/捕获机制已得到证明。必要。 我遇到了一些问题。我的电话和回叫有形成金字塔的异常趋势。有时是出于范围限制的原因,而其他时候是为了保证一定顺序的事件。(我想我也许可以通过重构来解决其中的一些问题,但是今后我想完全避免“回调地

  • 我正在使用带有节点的数据库。js。以下请求可以正常工作: 我想异步返回多个的结果,但以下操作失败: 然后我必须在每个元素上调用,所以在调用函数时: 然而我得到: 还有点奇怪: 我怀疑我遗漏了的工作方式,那么如何返回多个结果的已实现结果呢?