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

如何防止Node.js在等待回调时退出?

刘永望
2023-03-14
问题内容

我有这样的代码:

var client = new mysql.Client(options);
console.log('Icanhasclient');

client.connect(function (err) {
  console.log('jannn');
  active_db = client;
  console.log(err);
  console.log('hest');

  if (callback) {
    if (err) {
      callback(err, null);
    }

    callback(null, active_db);
  }
});

我的问题是,节点在运行时立即终止。它显示“ Icanhasclient”,但没有调用回调内的console.log。

(本例中的mysql是node-
mysql

有什么办法可以使node.js在退出之前等待回调完成?


问题答案:

回调未排队

节点运行直到所有事件 队列 都为空。诸如以下的调用时,回调将添加到事件 队列

  emmiter1.on('this_event',callback).

已执行。该调用是模块开发人员编写的代码的一部分。

如果模块是同步/阻塞版本的快速端口,则在操作的某些部分完成之前可能不会发生这种情况,并且所有队列在此之前可能为空,从而允许节点静默退出。

这是一个偷偷摸摸的错误,这是模块开发人员在开发过程中可能不会遇到的错误,因为它在具有多个 队列的
繁忙系统中很少发生,因为在临界时间很少所有人都空着。

用户可能的修复/错误检测器是在可疑函数调用之前插入特殊的计时器事件。



 类似资料:
  • 问题内容: 在IE上,我可以使用(非常不标准,但可以正常工作)的jQuery做到这一点 但是,是否可以以在Firefox上运行的方式或以跨浏览器的方式获得奖励呢? 作为记录: 什么也没做。 解决了问题,但使退格键在页面上不可用,这甚至比原始行为还差。 编辑:我这样做的原因是我不是在创建一个简单的网页而是一个大型应用程序。仅仅因为您在错误的位置按了退格键,就失去了10分钟的工作,这真是令人讨厌。通过

  • 问题内容: 当使用简单的回调(例如下面的示例)时: 如何更改功能以使用异步/等待?具体来说,假设“ someEvent”被保证只能被调用一次,那么我希望函数测试是一个异步函数,该异步函数在执行回调之前不会返回,例如: 问题答案: 不是魔术。异步函数是可以为您解开Promises的函数,因此您需要返回一个Promise才能起作用。像这样: 然后 但这也是一个谎言,因为异步函数也返回Promises本

  • 使用以下示例中的简单回调时: 如何将函数更改为使用异步/等待?具体地说,假设某个事件保证被调用一次并且只有一次,我希望函数测试是一个异步函数,直到执行回调才返回,例如:

  • 我有一个页面,有一个子组件用于浏览按钮,在父组件上,通过回调我用浏览文件设置状态。

  • 问题内容: 假设您需要执行一些依赖于某些临时文件的操作。既然我们在这里谈论Node,那么这些操作显然是异步的。为了知道何时可以删除临时文件,等待所有操作完成的惯用方式是什么? 这是一些代码,显示我想做什么: 但是,如果我这样编写,则可以在前两个调用有机会使用该文件之前执行第三个调用。我需要某种方法来确保前两个调用在结束之前已经完成(调用了它们的回调),而没有嵌套这些调用(并使它们在实践中保持同步)