node 异常捕获示例
事件队列里面的异常捕获
如下代码:
function test(callback){
// 这个事件会在另外一个事件队列里面,这里的throw抛出异常,下面的程序会捕获不到
setTimeout(()=>{
if (Math.random() < 0.1) {
callback()
} else {
throw new Error('fail')
}
})
}
try {
test(()=>{
console.log('success');
})
} catch (error) {
// 捕获不到
console.log('fail')
}
捕获异常
function test(callback){
setTimeout(()=>{
if (Math.random() < 0.1) {
callback('smile')
} else {
callback(new Error('fail'))
}
})
}
test((res)=>{
if (res instanceof Error) {
console.log('fail')
} else {
console.log('success');
}
})
优化
将回调函数的第一个参数设置为异常,其他参数才是真正的参数
function test(callback){
setTimeout(()=>{
if (Math.random() < 0.1) {
callback(null,'smile')
} else {
callback(new Error('fail'))
}
})
}
test((res)=>{
if (res) {
console.log('fail')
} else {
console.log('success');
}
})
作者:孟繁贵 Email:meng010387@126.com 期待共同进步!