大家看这样一句
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’事件监听,发现代码没有运行到这个监听事件中。
- 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)
在触发的时候,是同步的。