2 回答

TA貢獻1811條經驗 獲得超5個贊
是否以及何時這樣做將是一個見仁見智的問題,因此這部分對于 Stack Overflow 來說是題外話。
但具體的問題是:如果你這樣做了,你需要采取什么預防措施嗎?答案是:是的。您需要捕獲和處理錯誤。
考慮這個返回承諾的即發即棄異步調用:
doSomethingAsync();
如果正在做的事情可能失敗,則該承諾可能會被拒絕。如果它被拒絕并且沒有處理該拒絕,那么:
在瀏覽器中,您會收到寫入瀏覽器控制臺的錯誤。99.9999999% 的用戶不會注意到。
在 Node.js 中,您會將此錯誤寫入控制臺:
(節點:26477)[DEP0018] DeprecationWarning:不推薦使用未處理的承諾拒絕。將來,未處理的 Promise 拒絕將使用非零退出代碼終止 Node.js 進程。
請注意警告:在某些時候,Node.js 的未來版本可能會在您允許未處理的 Promise 拒絕時開始 *終止進程。
因此,如果您一勞永逸,請務必捕獲錯誤,即使您只是默默地吞下它們:
doSomethingAsync().catch(error => {}); // Obviously only do this if you really don't
// care about the error!
有趣的旁注:在 JavaScript 中,您一直在處理未處理的承諾履行??紤]:
doSomethingAsync()
.then(result => {
// ...do something with result...
})
.catch(error => {
// ...handle/report the error...
});
所有的承諾都在那里處理嗎?
不,那很好。
記住這一點then并catch創建并返回一個承諾。上面返回的承諾catch沒有附加任何處理程序。沒關系,只要它永遠被滿足,而不是被拒絕。沒有任何東西可以滿足這種滿足感。:-)

TA貢獻1821條經驗 獲得超5個贊
我想我普遍關心的是,你有處理錯誤的機制嗎?
eslint 有一個no-floating-promises
規則,至少強制你添加 a .catch()
,我認為這很好。
添加回答
舉報