2016-09-06 69 views
0

我正在尋找一種解決方案,在該解決方案中,我可以捕獲瀏覽器控制檯中記錄的所有錯誤(已處理/未處理)。JavaScript Capture處理錯誤

我知道關於window.onerrorwindow.addeventlistener('error', function(){})

上述代碼僅捕獲未處理的錯誤。我還需要捕獲處理的錯誤。

例如:

function foo() { 
    var x = null; 
    try { 
    x.a = ""; 
    } catch (e) { 
    //Exception will be digested here. 
    } 

    var y = null 
    y.b = ""; 
} 

window.onerror = function() { 
    //Write logic for the errors logged in console. 
} 

foo(); 

在上面的例子try catch是存在的,所以我會得到錯誤僅適用於可變yx

是否有任何方法來聆聽/捕獲catch塊?

謝謝

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#The_finally_clause –

+0

你可以這樣做,當使用調試器。但不是來自JS本身。你爲什麼想這樣做? – Oriol

+0

如果你真的想要,你可以拋出一個自定義錯誤後,將其傳遞給window.onerror。例如:https://fiddle.jshell.net/L29jv5fv/你想做什麼? –

回答

0

嘗試手動調用window.onerror。但請重新考慮改變您的方法。這是非常骯髒的。

window.onerror = function(msg, url, lineNo, columnNo, error) { 
    if (error === 'custom') { 
    console.log("Handled error logged"); 
    return true; 
    } 
    console.log("unhandled error") 
    return false; 
}; 

例的try/catch

var myalert = function() { 
    try { 
    console.log(f); 
    } catch (e) { 
    window.onerror('test',null,null,null,'custom'); 
    } 
    console.log("Gets here"); 
} 

https://fiddle.jshell.net/L29jv5fv/2/

0

現實情況是,如果一個異常被捕獲,然後因爲你的代碼知道如何處理它是沒有問題的。

在像Java這樣的其他編程語言中,最好的做法是隻捕獲可處理的異常,並將其他所有內容拋到鏈上和/或映射到另一個可能對調用堆棧更有用的異常。

例如:

function foo() { 
    var x = null; 
    try { 
    x.a = ""; 
    } catch (e) { 
    //Exception will be digested here. 
    console.log("I am writing code here but still don't know how to proceed"); 
    throw new CustomError("Something was wrong"); 
    } 

    var y = null 
    y.b = ""; 
}