关于promise中reject和catch的问题

reject和catch是否都会执行,或者只执行其中一个,分别在什么情况下执行?

UYOU
浏览 1157回答 4
4回答

慕码人8056858

一、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 没有resolveVM367087: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 resolveVM367087: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 resolvethrow new Error 的情况和rej一样,但是他俩只会有一个发生 另外,网络异常(比如断网),会直接进入catch而不会进入then的第二个回调

哔哔one

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

12345678_0001

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

互换的青春

reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。对于catch如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript