驗證參數並返回函數中的錯誤很常見。JavaScript回調錯誤處理
然而,在JavaScript回調函數,如:
function myFunction(num, callback) {
if (typeof num !== 'number') return callback(new Error('invalid num'))
// do something else asynchronously and callback(null, result)
}
我寫了很多這樣的功能,但我不知道是否有什麼東西可能有害。因爲在大多數情況下,調用者認爲這是一個異步函數,並且回調將在函數調用後的代碼之後執行。但如果某些參數無效,該函數將立即調用回調函數。所以調用者必須小心處理這種情況,即意外的執行順序。
我想聽聽關於這個問題的一些建議。我是否應該認真考慮所有異步回調可能會立即執行?或者我應該使用類似setTimeout(...,0)的東西來將同步事物轉換爲異步事件。或者有更好的解決方案,我不知道。謝謝。
我刪除了我的downvote。我猜測函數被調用的方式嚴重到足以引發生產,而且不應該在生產中發生。 –
@PatrickRoberts:我已經刪除了答案的這一部分,這與問題並不相關。我可以看到你的觀點,儘管我還沒有同意它。我需要更多地考慮它。我注意到如果你在設置一個ES2015 Promise('let p = new Promise(resolve => {throw new Error();})')的時候拋出它,它會被Promise構造器轉換爲拒絕,贊成單一錯誤渠道的觀點,因爲這種API的設計思想和經驗...... –
我的方法也是不正確的。正如評論者指出的那樣,callstack是非常重要的考慮事項,特別是當開發人員使用你的函數試圖無限期地重試時,如果你的函數在出現錯誤時是同步的,最終會導致一個stackoverflow。 –