我有这样的代码:
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).
已执行。该调用是模块开发人员编写的代码的一部分。
如果模块是同步/阻塞版本的快速端口,则在操作的某些部分完成之前可能不会发生这种情况,并且所有队列在此之前可能为空,从而允许节点静默退出。
这是一个偷偷摸摸的错误,这是模块开发人员在开发过程中可能不会遇到的错误,因为它在具有多个 队列的 繁忙系统中很少发生,因为在临界时间很少所有人都空着。
用户可能的修复/错误检测器是在可疑函数调用之前插入特殊的计时器事件。