程式碼:
var der = {};
var p = new Promise(function (resolve, reject) {
der.reject = reject;
})
p.then((v) => {
console.log('resolve');
console.log(v);
})
p.catch(function (v) {
console.log(v);
console.log('reject');
console.log(v);
});
der.reject(p);
console.log(p);
火狐下方只輸出reject,chrome下正常輸入,然後會出現Uncaught (in promise)
請問,為什麼會出現未捕獲的異常呢,p的catch明明定義了,而且為什麼火狐下只輸出reject,輸出p的操作都無效果(實則應該也是出現異常未捕獲導致)
補充:
出現未捕獲的異常的原因是,雖然then中沒定義第二個函數,但是仍然是運行then,並且將據因和狀態傳遞給返回的新的Promise對象,返回的Promise物件沒有catch回調,所以報出了異常
但是firefox中輸出p無效果的原因仍然不清楚
欧阳克2017-06-14 10:55:56
Promise相當於一個標準,符合標準的這種原型都可以稱為promise,在標準之外的特性不同瀏覽器可能不一樣,很顯然,火狐認為.catch和.then可以分別聲明,然後在運行時回應,也就是你上邊提到的沒報錯;而谷歌則認為.catch要連同.then中的異常一同處理,所以需要作用在.then之後的promise上。你將.then().catch連用,Google就不會報錯。深層的原因也有可能一個是基於事件,一個是基於輪詢導致的。