Promise中reject和catch的區別

一、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的第二個回調**
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章