2 回答

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

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)
})
添加回答
舉報