关于 Promise的错误处理,为什么使用分离回调?

70 阅读1分钟

温馨提示:

  • 本文较短,预计需要3分钟可以学会
  • 本节的目的说明 和promise相关的 三种错误处理方式

1、try...catch 同步形式

function foo() {
         setTimeout(function () {
             baz.bar() // 因为 这个地方 出错 baz 和 bar 都没有定义 
         }, 1000)
     }

     try {
         foo() // baz is not defined
     } catch (err) {
         console.log(err) // 这一句永远不会被打印 捕获不到异常
     }   

2、error-first 回调风格

function foo(cb) {
        setTimeout(function () {
            try {
                var x = baz.bar(); //ReferenceError: baz is not defined
                cb(null, x)
            } catch (err) {
                cb(err)
            }
        }, 500)
    }

    foo(function (err, val) {
        if (err) {
            console.log(err); // 当前状态 抓不到异常
        } else {
            console.log(val)
        }
    })

3、promise 回调分离 一个回调用来表示完成 一个表示拒绝

 var p = Promise.reject('ops');
     p.then(
         function fulfilled() {},
         function rejected(err) {
             console.log(err) // ops
         }
     )

4、注意另外一种情况

var t = Promise.resolve(43);
    t.then(
        function fulfilled(msg) { // 数字这个地方 没有 toLowerCase方法
            console.log(msg.toLowerCase()) //TypeError: msg.toLowerCase is not a function
        },
        function rejected(err) {
            console.log(err) //  Uncaught (in promise) 这句不会被打印
        }
    )
  • 本文完,感谢阅读