搜尋

首頁  >  問答  >  主體

javascript - 如果Promise物件reject自身

程式碼:

            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無效果的原因仍然不清楚

女神的闺蜜爱上我女神的闺蜜爱上我2727 天前742

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-06-14 10:55:56

    雷雷

    回覆
    0
  • 欧阳克

    欧阳克2017-06-14 10:55:56

    Promise相當於一個標準,符合標準的這種原型都可以稱為promise,在標準之外的特性不同瀏覽器可能不一樣,很顯然,火狐認為.catch和.then可以分別聲明,然後在運行時回應,也就是你上邊提到的沒報錯;而谷歌則認為.catch要連同.then中的異常一同處理,所以需要作用在.then之後的promise上。你將.then().catch連用,Google就不會報錯。深層的原因也有可能一個是基於事件,一個是基於輪詢導致的。

    回覆
    0
  • 取消回覆