亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當then方法返回的是一個新的Promise實例。catch方法無法捕捉新實例的錯誤

當then方法返回的是一個新的Promise實例。catch方法無法捕捉新實例的錯誤

慕雪6442864 2018-10-14 15:25:34
    function loadImageAsync(url) {      return new Promise(function(resolve, reject) {        throw new Error('BUG FOREVER')        const image = new Image();        image.onload = function() {          resolve(image);        };        image.onerror = function() {          reject(new Error('Could not load image at ' + url));        };        image.src = url;      });    }    let src1='https://image.suning.cn/uimg/sop/commodity/213287247648868791262800_x.jpg'    let src2='https://image.suning.cn/uimg/sop/commodity/742303264420020864606900_x.jpg'    let img1=loadImageAsync(src1)    let img2=loadImageAsync(src2)   img1.then(function(img){        console.log('第一個圖片 height='+img.height)        return img2    }).then(function(img){        console.log('第二個圖片 width='+img.width)    }).catch(function(err){        console.log('fail'+err)    })
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

未捕獲的異常是這里拋出的

let img2=loadImageAsync(src2)

promise的構造器是同步的,只要你執行loadImageAsync方法就會立即拋出異常。
然而promise中的error比較特殊,它不會中斷下面程序的運行,并且之后你還是可以catch到,比如說你setTimeout 2s后還是可以catch到。
我感覺這個現象還是挺特別的,不知道有哪位大佬能解釋一下
==================分割線======================================
哈,構造器里面的異常應該是被promise吃掉了,并沒有往上拋,但會提示,被控制臺誤導了。
let img1=loadImageAsync(src1)
let img2=loadImageAsync(src2)
此時,異常已經產生了,img1和img2的狀態是rejected,所以他們倆會直接走catch


查看完整回答
反對 回復 2018-10-26
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

img1拋出錯誤之后就不走then了直接catch 沒有走 return img2
所以你的img2沒有定義catch

img1.then(function(img){

    console.log('第一個圖片 height='+img.height)

    return img2

}).then(function(img){

    console.log('第二個圖片 width='+img.width)

}).catch(function(err){

    console.log('圖片1 fail'+err)

    return img2//這只是你程序的寫法 如果img1不報錯img2報錯這個寫法有問題

}).catch(function(err){

    console.log('圖片2 fail'+err)

})



查看完整回答
反對 回復 2018-10-26
  • 2 回答
  • 0 關注
  • 2220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號