关于promise中reject和catch的问题

2021-07-15  本文已影响0人  jesse28

一、reject后的东西,一定会进入then中的第二个回调,如果then中没有写第二个回调,则进入catch

var p1=new Promise((resolve,rej) => {
   console.log('没有resolve')
   //throw new Error('手动返回错误')
   rej('失败了')

})

p1.then(data =>{
   console.log('data::',data);
},err=> {
   console.log('err::',err)
}).catch(
   res => {
   console.log('catch data::', res)
})

结果:

没有resolve
err:: 失败了

then中没有第二个回调的情况

 var p1=new Promise((resolve,rej) => {
    console.log('没有resolve')
    //throw new Error('手动返回错误')
    rej('失败了')

 })

 p1.then(data =>{
    console.log('data::',data);
 }).catch(
    res => {
    console.log('catch data::', res)
 })

结果:

没有resolve
catch data:: 失败了

如果没有then, 也可以直接进入catch

 var p1=new Promise((resolve,rej) => {
    console.log('没有 resolve')
    //throw new Error('手动返回错误')
    rej('失败了')

 })

 p1.catch(
    res => {
    console.log('catch data::', res)
 })

结果:

没有resolve
catch data:: 失败了

二、resolve的东西,一定会进入then的第一个回调,肯定不会进入catch

 var p1=new Promise((resolve,rej) => {
    console.log('resolve')
    //throw new Error('手动返回错误')
    resolve('成功了')

 })

 p1.then(data =>{
    console.log('data::',data);
 }).catch(
    res => {
    console.log('catch data::', res)
 })

结果

resolve
data:: 成功了

不会进入catch的情况

 var p1=new Promise((resolve,rej) => {
    console.log('resolve')
    //throw new Error('手动返回错误')
    resolve('成功了')

 })

 p1.catch(
    res => {
    console.log('catch data::', res)
 })

结果:

resolve

throw new Error 的情况和rej一样,但是他俩只会有一个发生
另外,网络异常(比如断网),会直接进入catch而不会进入then的第二个回调**
引用链接:https://www.jianshu.com/p/78711885955b

上一篇 下一篇

猜你喜欢

热点阅读