2012-03-20 51 views
0

我發現,與異步回調,我需要寫每一個回調函數一個try/catch。這似乎有點容易出錯的是,其中有我可以實現一個頂級嘗試的方法或技術/捕捉,捕捉一切?如果不是我正在使用的技術被認爲是好的做法,還是有更好的方法來做事情?是否有這樣的事,作爲一個「所有」 JavaScript錯誤處理程序?

+1

在JavaScript中使用'try..catch'非常罕見。如果你經常使用它,你會錯誤地編寫你的代碼。 – zzzzBov 2012-03-20 02:13:11

回答

1

有這樣做的方法有兩種:

  1. 設置window's onerror attribute
    • 叫三個參數(消息,網址,LINENUMBER)
    • 返回true(!)阻止默認錯誤公頃ndling(使這就像一個包羅萬象的)
  2. 添加error事件監聽器window
    • 調用錯誤事件e作爲其唯一的參數
    • 調用e.preventDefault()防止默認的錯誤處理

如果不是,我是我們的技術認爲是好的做法還是有更好的辦法做事?

由於JavaScript的動態特性,try/catch非常緩慢。幾乎總是有更好的方法,例如:在調用方法之前檢查是否存在某個方法。

// bad 
try { 
    document.getElementById('foo').focus(); 
} catch(e) { 
    alert('foo not found'); 
} 

//good 
var el = document.getElementById('foo'); 
if (el) { 
    el.focus(); 
} else { 
    alert('foo not found'); 
} 

對於您的具體情況,請顯示一些您的代碼;也許在一個單獨的問題。

1

不,不這樣做,無所不包,幾乎總是導致的問題(因爲你不能例外區分得非常好)。

0

這可能是不依賴於一個全球性的包羅萬象的一個好主意,但它不是一個壞主意,有一個(在這裏,你可能不希望引發錯誤的情況下)。這樣你就可以按照你想要的方式處理未被捕獲的錯誤。

使用jQuery:

$(window).error(function (msg, url, line) { 

    //do something 
}); 
相關問題