2017-04-06 18 views
0

我在理解爲什麼在.catch中使用throw爲什麼給我"Unhandled promise rejection"。如果我只是console.log錯誤萬物按其應有的工作。throw和console.log與catch中的承諾的區別

「扔...引發當前代碼塊中的異常,並導致其 退出,或者如果在try塊中引發流向下一個catch語句。

console.error剛剛打印出向瀏覽器開發人員發送紅色消息 工具javascript控制檯並且不會導致執行流程的任何更改。「

https://stackoverflow.com/a/25377160/7825826

好像扔是處理它的正確方法?但是,爲什麼我會得到一個錯誤?

例如(如果我沒有任何DB上運行的1330千萬):

mongoose.connect('mongodb://localhost:1330/db') 
    .catch((error) => { 
    throw error; 
}); 

給我關於「未處理的承諾拒絕」一個錯誤信息,但如果我console.log(error),這一切都很好。

+0

你可以顯示代碼來演示你不明白的東西嗎? – lonesomeday

+0

對不起,添加了我的代碼。 – gelv

+0

當你在'catch()'中重新拋出'error'時,你期望發生什麼? – robertklep

回答

0

當您在catch回調中重新拋出錯誤時,結果承諾將被拒絕。如果拒絕沒有在任何地方處理(通過另一個.catch下鏈),你會得到「未處理的拒絕」消息。

這相當於其執行仍然會拋出一個異常,其調用程序時,同步

try { 
    connectToNotExistingDatabase(); // throws exception 
} catch(error) { 
    throw error; 
} 

。相反,如果你還沒有重新編譯它(但是它是console.log),它只會返回undefined