前言
在最近的项目中,用到了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的回调函数。
原文地址:https://www.cnblogs.com/andrewkz/p/11254555.html
时间: 2024-11-09 08:02:57