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');
    }
})
原文地址:https://www.cnblogs.com/mengfangui/p/13728794.html