What are the best practices for JavaScript error handling?

前端 未结 5 576
孤城傲影
孤城傲影 2021-01-29 17:25

I\'m looking to start making my JavaScript a bit more error proof, and I\'m finding plenty of documentation on using try, catch, finally,

5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-29 18:03

    Nicholas Zakas of Yahoo! fame did a talk on Enterprise Error Handling (slides) at Ajax Experience 2008, in which he proposed something like this:

    function log(sev,msg) {
        var img = new Image();
        img.src = "log.php?sev=" +
            encodeURIComponent(sev) +
            "&msg=" + encodeURIComponent(msg);
    }
    
    // usage
    log(1, "Something bad happened.")
    
    // Auto-log uncaught JS errors
    window.onerror = function(msg, url, line) {
        log(1, msg);
        return true;
    }
    

    A year later, Nicholas Zakas posted an update on his blog which included a clever pattern to inject error handling code automatically on your production environment (using aspect-oriented programming).

    When you start logging window.error calls, you're going to notice two things:

    1. If your site is fairly complex, you're going to log a lot of errors
    2. You'll be seeing a bunch of useless "window.error in undefined:0" messages

    Reducing the torrent of log entries is as simple as testing for severity and/or a random number before logging to the server:

    function log(sev,msg) {
        if (Math.random() > 0.1) return; // only log some errors
    
        var img = new Image();
        img.src = "log.php?sev=" +
            encodeURIComponent(sev) +
            "&msg=" + encodeURIComponent(msg);
    }
    

    Handling the useless window.error in undefined:0 errors depends on your site architecture, but can try identifying all Ajax calls and throwing an exception when something fails (possibly returning a stack trace using stacktrace.js).

提交回复
热议问题