关于出现已捕获异常导致进程退出的问题
发布于 10 年前 作者 yunnysunny 5190 次浏览 最后一次编辑是 8 年前

大家看这样一句

380   try {
381      // Execute the callback if one was provided
382      if(typeof callback == 'function'){callback(err, document, info.connection);}
383    } catch(err) {console.error('发生异常',err.stack);
384      self._emitAcrossAllDbInstances(self, null, "error", err, self, true, true);
385    }

在382行会抛出异常,这个异常已被catch到了,console也打印出来了,但是进程却退出了,我在程序中写了process的’uncaughtException’事件监听,发现代码没有运行到这个监听事件中。

5 回复
  • try-catch模式不能用于捕捉异步代码中发生的错误;
  • domain处理错误。

我刚才已经说了,被catch到了,那就不是异步代码了

代码太少了,这根本看不出什么东西

同意一楼的,try-catch不能捕获异步异常,并且你这代码太少, 触发了uncaughtException说明还是有异常你没有捕获到的,而这些没有捕获到的异常就发生在异步中 还是用domain吧!

发生异常 TypeError: object is not a function at exports.create (E:\kuaipan\code\node\authroom_test\routes\feedback.js:45:24) at len (E:\kuaipan\code\node\authroom_test\dao\liveRoomDao.js:143:13) at Collection.findOne (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\collection.js:953:5) at Cursor.nextObject (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\cursor.js:683:35) at Cursor.close (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\cursor.js:903:5) at Cursor.nextObject (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\cursor.js:683:17) at Cursor.nextObject.commandHandler (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\cursor.js:658:14) at Db._executeQueryCommand (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\db.js:1670:9) at Server.Base._callHandler (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\base.js:382:41) at Server.connect.connectionPool.on.server._serverState (E:\kuaipan\code\node\authroom_test\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\server.js:472:18)

Process finished with exit code 0

在382行发生异常,异常被捕获到了,但是进程却退出了。 我现在不是问domain怎么使用的语法问题,我现在问的是问什么异常能够捕获到,进程还退出。如果你们认为是异步代码,怎么解释console.error('发生异常',err.stack);被打印出来? 代码的堆栈很长,每一个牵扯到的文件我都看了,这段代码callback(err, document, info.connection)在触发的时候,是同步的。

回到顶部