一尘不染

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

node.js

我有这样的代码:

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。

(本例中的mysqlnode-
mysql

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


阅读 349

收藏
2020-07-07

共1个答案

一尘不染

回调未排队

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

  emmiter1.on('this_event',callback).

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

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

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

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

2020-07-07