直接就可以处理
try {
syncError()
} catch (e) {
/*处理异常*/
console.log(e.message)
}
console.log('异常被捕获了,我可以继续执行')
如果我们对 fs.readFile() 做 try/catch 捕获,当我们调用 fs.readFile 并为其注册回调函数这个步骤对应异步 I/O 中是提交请求,而 callback 函数会被存放起来,等到下一个事件循环到来 callback 才会被取出执行,这个时间是将来的某个时间点,而 try/catch 是同步的,捕获不到这个错误的。
下面因为我对一个 null 对象做了非法操作,这时程序会给我们报一个 TypeError: Cannot read property 'a' of null 错误,在 Java 中可以称它为空指针异常。
类似于这样的一个错误如果没有被捕获到,在单进程的应用程序中必然会导致进程退出,无关语言。
try {
fs.readFile(filename, (err, file) => {
const obj = null
obj.a;
// TODO
})
} catch(err) {
// TODO
}
fs.readFile(filename, (err, file) => {
try {
const obj = null;
obj.a;
// TODO
} catch (err) {
// TODO
// 处理回调函数中的异常, 参考异步解决方案
console.error('Caught an exception:', err);
// 如果是 nestjs 有全局异常拦截器可以这样处理
return reject(new CustomException('API调用异常,未获取到用户token'));
}
});
require("fs").mkdir('G://test', function (e) {
if (e) {
/*处理异常*/
console.log(e.message)
} else {
console.log('创建目录成功')
}
})
nestjs koa express fastify 应该都有类似的方法,具体看一下文档找一找
process.on('uncaughtException',function(err){
console.error('未捕获的异常', err.message);
})
process.on('unhandledRejection', function (err, promise) {
console.error('有Promise没有被捕获的失败函数', err.message);
})