【JavaScript】Promise.then() 第二个参数和 catch() 的区别
2021-05-30 08:05
标签:eth 写法 代码 区分 ror OLE 存在 处理异常 理由 首页我们先要区分几个概念 主要区别就是,如果在 then 的第一个函数里抛出了异常,后面的 catch 能捕获到,而 then 的第二个函数捕获不到。 catch 只是一个语法糖而己 还是通过 then 来处理的,大概如下所示 then 的第二个参数和 catch 捕获错误信息的时候会就近原则,如果是 promise 内部报错,reject 抛出错误后,then 的第二个参数和 catch 方法都存在的情况下,只有 then 的第二个参数能捕获到,如果 then 的第二个参数不存在,则 catch 方法会捕获到。 上面代码中,第二种写法要好于第一种写法,理由是第二种写法可以捕获前面 then 方法执行中的错误,也更接近同步的写法(try/catch)。因此,建议总是使用 catch 方法,而不使用 then 方法的第二个参数。 【JavaScript】Promise.then() 第二个参数和 catch() 的区别 标签:eth 写法 代码 区分 ror OLE 存在 处理异常 理由 原文地址:https://www.cnblogs.com/AAABingBingBing/p/14756036.htmlPromise.then() 第二个参数和 catch() 的区别
1. 区别
Promise.prototype.catch = function (fn) {
return this.then(null, fn)
}
const promise = new Promise((resolve, rejected) => {
throw new Error(‘test‘)
})
//此时只有then的第二个参数可以捕获到错误信息
promise
.then(
res => {
//
},
err => {
console.log(err)
}
)
.catch(err1 => {
console.log(err1)
})
//此时catch方法可以捕获到错误信息
promise
.then(res => {
//
})
.catch(err1 => {
console.log(err1)
})
//此时只有then的第二个参数可以捕获到Promise内部抛出的错误信息
promise
.then(
res => {
throw new Error(‘hello‘)
},
err => {
console.log(err)
}
)
.catch(err1 => {
console.log(err1)
})
//此时只有then的第二个参数可以捕获到Promise内部抛出的错误信息
promise.then(
res => {
throw new Error(‘hello‘)
},
err => {
console.log(err)
}
)
//此时catch可以捕获到Promise内部抛出的错误信息
promise
.then(res => {
throw new Error(‘hello‘)
})
.catch(err1 => {
console.log(err1)
})
2. 两个捕获方法的比较
// bad
promise.then(
function (data) {
// success
},
function (err) {
// error
}
)
// good
promise
.then(function (data) {
//cb
// success
})
.catch(function (err) {
// error
})
下一篇:算法分析与设计(work8)
文章标题:【JavaScript】Promise.then() 第二个参数和 catch() 的区别
文章链接:http://soscw.com/index.php/essay/89474.html