Node.js 中的异常捕获
同步代码的错误处理
- 同步代码中的异常使用 try{}catch 结构即可捕获处理。
1
2
3
4
5
| try {
throw new Error('错误信息');
} catch (e) {
console.error(e.message);
}
|
异步代码的错误处理
- callback 传参
1
2
3
4
5
6
7
8
| fs.mkdir('/dir', function (e) {
if (e) {
/*处理异常*/
console.log(e.message);
} else {
console.log('创建目录成功');
}
});
|
- event 方式
1
2
3
4
5
6
7
8
9
10
11
12
13
| const events = require('events');
//创建一个事件监听对象
const emitter = new events.EventEmitter();
//监听error事件
emitter.addListener('error', function (e) {
/*处理异常*/
console.log(e.message);
});
//触发error事件
emitter.emit('error', new Error('出错啦'));
|
- Promise 方式
1
2
3
4
5
| new Promise((resolve, reject) => {
reject('error message');
}).catch((e) => {
console.log(e.message);
});
|
- async/await 方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| function sleep() {
return new Promise(function (resolve, reject) {
reject('error message');
});
}
async function main() {
try {
await sleep();
} catch (err) {
console.log(err);
}
}
main().then();
|
- process 方式
你的 node.js 进程都应该加上这两个时间的捕获做为你的最后补救措施,但是不应该当作 On Error Resume Next(出了错误就恢复让它继续)的等价机制。
npm graceful
专门做这个事情, 也可以引用这个包
1
2
3
4
5
6
7
| process.on('uncaughtException', function (e) {
console.log(e.message);
});
process.on('unhandledRejection', function (e) {
console.log(e.message);
});
|