大量的JavaScript庫和框架接受一些操作完成後調用的函數。例如:javascript:如何使用抑制回調中的異常的庫?
chrome.storage.local.get('foo', function() { console.log("foo"); });
但我只是意識到一些API的,包括Google上面提到的捕捉本地存儲API和抑制功能的所有異常被調用。例如,如果我修改上面的代碼有錯誤(ReferenceError
,我想在控制檯查看):通過捕捉和忽略所有的錯誤
chrome.storage.local.get('foo', function() { a.b(); });
沒有錯誤會因爲API提高壓制它。在這種情況下如何調試我的代碼?是否有任何方法來帶回錯誤或所有這些api只是不打算用於複雜的代碼,我需要手動調試通過console.log
找到什麼失敗?
更新1
簡單地增加自己的try-catch到所有回調將增加複雜的代碼,是不是真的歡迎。此外,簡單console.log
比異常更糟糕,因爲開發工具捕獲異常,顯示爲紅色,附有堆棧跟蹤等。當然,所有這些都可以用console.log
進行模擬,但這會增加更多的複雜性。
更新2
好像它是JS代碼忽略誤差的ommon實踐,使我不得不通過添加下劃線插件,並用它來包圍每個回調來實現醜陋的解決方案:
function _safeblock(block)
{
console.assert(block);
return function() {
try {
block.apply(this, arguments);
}
catch(e) {
console.log(e.message, e.stack);
}
};
}
function _safecall(block)
{
console.assert(block);
_safeblock(block)();
}
_.mixin({
safeblock: _safeblock,
safecall: _safecall,
});
你最終做了什麼來解決這個問題? –
@BenjaminGruenbaum我通過將每個第三方回調包含到安全代碼中實現了一個醜陋的解決方案。但這只是暫時的黑客攻擊,而不是一個適當的架構解決方案。 – grigoryvp