Node.js笔记之process模块解读(2)

process.on('beforeExit', function(code) { console.log('before exit: '+ code); }); process.on('exit', function(code) { setTimeout(function() { console.log('exit: ' + code); }, 0); }); a.b();

当异常一直没有被捕获处理的话,最后就会触发'uncaughtException'事件。默认情况下,Node.js会打印堆栈信息到stderr然后退出进程。不要试图阻止uncaughtException退出进程,因此此时程序的状态可能已经不稳定了,建议的方式是及时捕获处理代码中的错误,uncaughtException里面只做一些清理工作(可以执行异步代码)。

注意:node的9.3版本增加了process.setUncaughtExceptionCaptureCallback方法

当process.setUncaughtExceptionCaptureCallback(fn)指定了监听函数的时候,uncaughtException事件将会不再被触发。

process.on('uncaughtException', function() { console.log('uncaught listener'); }); process.setUncaughtExceptionCaptureCallback(function() { console.log('uncaught fn'); }); a.b(); // uncaught fn

message适用于父子进程之间发送消息,关于如何创建父子进程会放在child_process模块中进行。

调度任务

process.nextTick(fn)

通过process.nextTick调度的任务是异步任务,EventLoop是分阶段的,每个阶段执行特定的任务,而nextTick的任务在阶段切换的时候就会执行,因此nextTick会比setTimeout(fn, 0)更快的执行,关于EventLoop见下图,后面会做进一步详细的讲解

Node.js笔记之process模块解读

发出警告

process.emitWarning('Something warning happened!', { code: 'MY_WARNING', type: 'XXXX' }); // (node:14771) [MY_WARNING] XXXX: Something warning happened!

当type为DeprecationWarning时,可以通过命令行选项施加影响

--throw-deprecation 会抛出异常

--no-deprecation 不输出DeprecationWarning

--trace-deprecation 打印详细堆栈信息

process.emitWarning('Something warning happened!', { type: 'DeprecationWarning' }); console.log(4); node --throw-deprecation index.js node --no-deprecation index.js node --trace-deprecation index.js

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/887416983712d09b18ccb0287520ca4a.html