在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ Promise中的then的異常處理方法和catch有什么區(qū)別?

Promise中的then的異常處理方法和catch有什么區(qū)別?

promise中then和catch都可以處理異常,那么它們對于異常的處理有什么區(qū)別呢?

Promise.reject('error').then(()=> {}, val=> {
    console.log(val);
});

Promise.reject('error').catch(val=> {
    console.log(val);
});
回答
編輯回答
命多硬

.catch 只是一個語法糖而己 還是通過 then 來處理的

大概就是這樣

Promise.prototype.catch = function(fn){
    return this.then(null,fn);
}
2018年5月18日 12:09
編輯回答
空白格

then 的第一個函數(shù)出錯了,后面的catch可以捕獲,寫到then的第二個函數(shù)則捕獲不到

2017年9月9日 05:37
編輯回答
乖乖噠

首先糾正一個誤區(qū):
誰說 reject 是用來處理異常的了- -reject 是用來拋出異常的,catch 才是用來處理異常的
類比傳統(tǒng)的 try catch 寫法,reject 就相當(dāng)于 throw

然后 reject 是 Promise 的方法,而 catch 是 Promise 實(shí)例的方法:

let p = new Promise()
p.catch()
p.reject() // 沒有這個東西
Promise.reject()
Promise.catch() // 沒有這個東西

具體用法建議還是多看看文檔吧。
https://developer.mozilla.org...

補(bǔ)充

回答一下題主修改后的問題,then 的第二個參數(shù)和使用 catch 的區(qū)別

主要區(qū)別就是,如果在 then 的第一個函數(shù)里拋出了異常,后面的 catch 能捕獲到,而第二個函數(shù)捕獲不到

p
  .then(function () {
    throw new Error()
  }, function () {
    // won't capture this error
  })
  .catch(function () {
    // will capture the error
  })
2017年2月8日 08:36