为了账号安全,请及时绑定邮箱和手机立即绑定

关于promise中reject和catch的问题

关于promise中reject和catch的问题

UYOU 2019-03-06 13:15:38
reject和catch是否都会执行,或者只执行其中一个,分别在什么情况下执行?
查看完整描述

4 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

一、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)

 })


 VM367054:2 没有resolve

 VM367054:11 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)

 })


 VM367054:2 没有resolve

 VM367054:11 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)

 })

VM367087:2 没有resolve

VM367087:9 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)

 })

VM367087:2 resolve

VM367087:9 data:: 成功了

不会进入catch的情况

 var p1=new Promise((resolve,rej) => {

    console.log('resolve')

    //throw new Error('手动返回错误')

    resolve('成功了')


 })


 p1.catch(

    res => {

    console.log('catch data::', res)

 })

VM367087:2 resolve

throw new Error 的情况和rej一样,但是他俩只会有一个发生 

另外,网络异常(比如断网),会直接进入catch而不会进入then的第二个回调


查看完整回答
反对 回复 2019-03-24
?
哔哔one

TA贡献1854条经验 获得超8个赞

类似一个抛出错误 一个捕获错误 reject也可以用then不捕获


查看完整回答
反对 回复 2019-03-24
?
12345678_0001

TA贡献1802条经验 获得超5个赞

Promise.reject('错误').catch(err=>console.log(err))//输出‘错误’
执行了reject,就会执行catch(如果你写了)

查看完整回答
反对 回复 2019-03-24
?
互换的青春

TA贡献1797条经验 获得超6个赞

reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

对于catch如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。


查看完整回答
反对 回复 2019-03-24
  • 4 回答
  • 0 关注
  • 1163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信