重读es6, 正确了解promise中catch的用法

Posted andrewkz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重读es6, 正确了解promise中catch的用法相关的知识,希望对你有一定的参考价值。

前言

在最近的项目中,用到了es6的promise语法,发现promise.prototype.catch 并不只是单单reject抛出的回调函数,所以今天做一些笔录,防止以后在项目中又碰到这样的问题。

先介绍一下promise.prototype.catch

Promise.prototype.catch 方法是 .then(null, rejection) 或是 .then(undefined, rejection)的别名,用于指定发生错误时的回调函数。

如果Promise 对象状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。

下面是摘抄阮一峰的es6入门的

p.then((val) => console.log(‘fulfilled:‘, val))
  .catch((err) => console.log(‘rejected‘, err));

// 等同于
p.then((val) => console.log(‘fulfilled:‘, val))
  .then(null, (err) => console.log("rejected:", err));

下面是我自己写的例子

const testPromise = new Promise(function (resolve, reject) 
    let a = 5
    if (a === 5) 
      resolve(‘success‘)
     else 
      reject(‘catch error‘)
    
  )
  testPromise.then(res => 
    throw new Error(‘then error‘)
  ).catch(err => 
    console.log(‘catch error‘)
    console.log(err)
  )

这个例子最终会先输出catch error,然后再抛出错误信息。

总结

then中抛出错误,就会调用promise.prototype.catch的回调函数。

以上是关于重读es6, 正确了解promise中catch的用法的主要内容,如果未能解决你的问题,请参考以下文章

es6 promise的catch 和 then 的区别认识

防止 ES6 Promise 吞下错误(不使用 .catch)

[js高手之路] es6系列教程 - promise常见用法详解(resolve,reject,catch,then,all,race)

ES6基础入门教程(十六)promise异步队列

详解 ES6 Promise异步

ES6--new Promise()讲解