Node 风格的错误处理方式

传统 Node 风格的错误处理是使用回调函数实现的。下面是一个例子,该例子摘自《深入浅出 RXJS》。虽然这本书是讲 RXJS 的,但看到这里,我觉得还是有必要再记录一下。
Node 风格的错误处理方式的特点:方法内部使用 try...catch 捕获错误,当发生错误时,将错误对象传递给回调函数的第一个参数,如果没有错误发生,将 null 传递给回调函数的第一个参数,将处理结果传递给回调函数的第二个方法。
在回调函数中,首先对第一个参数进行判断,如果该参数为真,即上层操作产生了错误,需要进行相应处理。如果该参数为假,即上层操作正常,已经取得了正确结果,需要对正确的结果进行处理。

例子

定义一个反序列化 JSON 的 parseToJSON 方法:

function parseToJSON(str:string,cb:(err,res) => any):void{
    try{
        const res = JSON.parse(str)
        cb(null,res);
    }catch(e){
        cb(e,null);
    }
}

调用该方法:

parseToJSON("[]",(err,res) => {
    if(err){
        console.log(err)
        return;
    }
    console.log(res)
})

parseToJSON("xxx",(err,res) => {
    if(err){
        console.log(err)
        return;
    }
    console.log(res)
})

运行结果:

[]
SyntaxError: Unexpected token x in JSON at position 0

嵌套问题

如果涉及到嵌套操作,就会引发回调地狱:

parseToJSON("[]",(err,res) => {
    if(err){
        console.log("第一次转换错误:",err)
        return;
    }
    console.log("第一次转换:",res)
    parseToJSON("{}",(err,res) => {
        if(err){
            console.log("第二次转换错误:",err)
            return
        }
        console.log("第二次转换:",res)
        parseToJSON("xxx",(err,res) => {
            if(err){
                console.log("第三次转换错误:",err)
                return                
            }
            console.log("第三次转换:",res)
        })
    })
})

运行结果:

第一次转换: []
第二次转换: {}
第三次转换错误: SyntaxError: Unexpected token x in JSON at position 0

完。

你可能感兴趣的:(Node 风格的错误处理方式)