2016-06-11 76 views
0

我在理解Javascript承諾方面遇到了一些麻煩,特別是鏈接它們並將錯誤傳遞給鏈。在下面的代碼:如何正確鏈接Javascript中的承諾,並解決錯誤處理?

function myPromise() { 
    return new Promise((resolve, reject) => { 
    setTimeout(function() { 
     console.log('done') 
     reject('resolved'); 
    }, 1000); 
    }); 
} 

function myOtherPromise() { 
    return new Promise((resolve, reject) => { 
    myPromise().then(done => { 
     resolve(done); 
    }).catch(e => { 
     console.log('In myOtherPromise, caught err: ', e); 
     reject(e) 
    }); 
    }); 
} 

myOtherPromise().then(done => { 
    console.log('done calling myOtherPromise: ', done); 
}).catch(e => { 
    console.log('caught err from myOtherPromise', err); 
}); 

輸出顯示:

done 
In myOtherPromise, caught err: resolved 

我不明白爲什麼下面不打印:

'caught err from myOtherPromise' 

我覺得有一些基本的東西我我沒有得到。爲什麼myOtherPromise的拒收不會通過最後的catch區塊?

+2

因爲函數拋出試圖調用的console.log()'的ReferenceError當錯誤:錯誤是不是defined';) – Thomas

+0

避免['Promise'構造反模式(http://stackoverflow.com/q/23803743/1048572)! – Bergi

回答

4

您將錯誤捕獲到e變量中,但輸出err變量(未定義並導致運行時錯誤)。

.catch(e => { 
    console.log('caught err from myOtherPromise', err); 
}) 

應該是:

.catch(e => { 
    console.log('caught err from myOtherPromise', e); 
}) 
+0

Derp!謝謝 :) – iamthegreenfairy