鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 關(guān)于promise中reject和catch的問題

關(guān)于promise中reject和catch的問題

reject和catch是否都會(huì)執(zhí)行,或者只執(zhí)行其中一個(gè),分別在什么情況下執(zhí)行?

回答
編輯回答
情殺

一、reject后的東西,一定會(huì)進(jìn)入then中的第二個(gè)回調(diào),如果then中沒有寫第二個(gè)回調(diào),則進(jìn)入catch


 var p1=new Promise((resolve,rej) => {
    console.log('沒有resolve')
    //throw new Error('手動(dòng)返回錯(cuò)誤')
    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中沒有第二個(gè)回調(diào)的情況

 var p1=new Promise((resolve,rej) => {
    console.log('沒有resolve')
    //throw new Error('手動(dòng)返回錯(cuò)誤')
    rej('失敗了')

 })

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

 VM367054:2 沒有resolve
 VM367054:11 catch data:: 失敗了
  • 如果沒有then, 也可以直接進(jìn)入catch
 var p1=new Promise((resolve,rej) => {
    console.log('沒有 resolve')
    //throw new Error('手動(dòng)返回錯(cuò)誤')
    rej('失敗了')

 })

 p1.catch(
    res => {
    console.log('catch data::', res)
 })
VM367087:2 沒有resolve
VM367087:9 catch data:: 失敗了

二、resolve的東西,一定會(huì)進(jìn)入then的第一個(gè)回調(diào),肯定不會(huì)進(jìn)入catch

 var p1=new Promise((resolve,rej) => {
    console.log('resolve')
    //throw new Error('手動(dòng)返回錯(cuò)誤')
    resolve('成功了')

 })

 p1.then(data =>{
    console.log('data::',data);
 }).catch(
    res => {
    console.log('catch data::', res)
 })
VM367087:2 resolve
VM367087:9 data:: 成功了
  • 不會(huì)進(jìn)入catch的情況
 var p1=new Promise((resolve,rej) => {
    console.log('resolve')
    //throw new Error('手動(dòng)返回錯(cuò)誤')
    resolve('成功了')

 })

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

throw new Error 的情況和rej一樣,但是他倆只會(huì)有一個(gè)發(fā)生
另外,網(wǎng)絡(luò)異常(比如斷網(wǎng)),會(huì)直接進(jìn)入catch而不會(huì)進(jìn)入then的第二個(gè)回調(diào)

2018年7月6日 19:05
編輯回答
葬愛

Promise.reject('錯(cuò)誤').catch(err=>console.log(err))//輸出‘錯(cuò)誤’
執(zhí)行了reject,就會(huì)執(zhí)行catch(如果你寫了)

2018年3月3日 12:14
編輯回答
念初

reject函數(shù)的作用是,將Promise對象的狀態(tài)從“未完成”變?yōu)椤笆 保磸?pending 變?yōu)?rejected),在異步操作失敗時(shí)調(diào)用,并將異步操作報(bào)出的錯(cuò)誤,作為參數(shù)傳遞出去。

對于catch如果異步操作拋出錯(cuò)誤,狀態(tài)就會(huì)變?yōu)閞ejected,就會(huì)調(diào)用catch方法指定的回調(diào)函數(shù),處理這個(gè)錯(cuò)誤。另外,then方法指定的回調(diào)函數(shù),如果運(yùn)行中拋出錯(cuò)誤,也會(huì)被catch方法捕獲。

2018年1月13日 10:26
編輯回答
朽鹿

類似一個(gè)拋出錯(cuò)誤 一個(gè)捕獲錯(cuò)誤 reject也可以用then不捕獲

2017年4月26日 00:01