首页 > 学院 > 开发设计 > 正文

node处理未捕获异常

2019-11-08 02:40:37
字体:
来源:转载
供稿:网友

nodejs最有魅力的地方就是异步编程,但异步情况下异常处理起来就比较麻烦了。

// 同步方法var sync = function(){ throw new Error("出错了!!!")}// 异步方法var async = function(callback){ // do something PRocess.nextTick(function(){ throw new Error("出错了!!!") callback() })}

同步方法异常处理是没有问题的:

try { sync()}catch(err){ console.log(err.message) // 出错了!!!}

异步方法这种方式是捕获不到的

try { async()}catch(err){ console.log(err.message) // 不会打印内容}

方法1: 遵守nodejs潜规则,将异常从回调函数中以第一个参数传递出来

// 异步方法var async = function(callback){ // do something process.nextTick(function(){ var err = new Error("出错了!!!"); callback(err) })}async(function(err){ if(err){ console.log(err.message); }else{ // do something }})

方法2: process对象提供了捕获全局异常的方法

// 异步方法var async = function(callback){ // do something process.nextTick(function(){ throw new Error("出错了!!!") callback() })}process.on("uncaughtException", function(err){ console.log(err.message) // 出错了!!!})

这种方法缺点在于它在进程退出时才处理异常,我们往往需要尽早执行

方法三: 使用domain模块创建一个子域(JS子运行环境)

var domain = require('domain').create();domain.on("error", function(err){ console.log(err.message);})domain.run(function(){ async()})
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表