Promise中通过.then第二个回调和通过.catch获取reject()方法解析

一、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的第二个回调**
发布了139 篇原创文章 · 获赞 146 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/TCF_JingFeng/article/details/88779697