重读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)