美文网首页
js error 打印出错误堆栈

js error 打印出错误堆栈

作者: McDu | 来源:发表于2019-04-11 11:35 被阅读0次

    任何Error对象都有一个堆栈成员,它捕获它被构造的点。

    var stack = new Error().stack;
    console.log(stack)
    

    或者

    console.trace("error")
    

    try ... catch(err) { console.log(err)} 同样可以记录错误堆栈,因为抛出的是 Error 对象,可以获取到 stack 属性。


    Error.prototype 对象包含如下属性:

    • constructor--指向实例的构造函数
    • message--错误信息
    • name--错误的名字(类型)
      上述是 Error.prototype 的标准属性, 此外, 不同的运行环境都有其特定的属性. 在例如 Node, Firefox, Chrome, Edge, IE 10+, Opera 以及 Safari 6+ 这样的环境中, Error 对象具备 stack 属性, 该属性包含了错误的堆栈轨迹. 一个错误实例的堆栈轨迹包含了自构造函数之后的所有堆栈结构.

    1. Errors 也可以被作为其它对象, 你也不必抛出它们, 这也是为什么大多数回调函数把 Errors 作为第一个参数的原因。
    const fs = require('fs');
    
    fs.readdir('/example/i-do-not-exist', function callback(err, dirs) {
        if (err instanceof Error) {
            // `readdir` will throw an error because that directory does not exist
            // We will now be able to use the error object passed by it in our callback function
            console.log('Error Message: ' + err.message);
            console.log('See? We can use Errors without using try statements.');
        } else {
            console.log(dirs);
        }
    });
    
    1. Error 对象也可以用于 rejected promise, 这使得很容易处理 rejected promise:
    new Promise(function(resolve, reject) {
        reject(new Error('The promise was rejected.'));
    }).then(function() {
        console.log('I am an error.');
    }).catch(function(err) {
        if (err instanceof Error) {
            console.log('The promise was rejected with an error.');
            console.log('Error Message: ' + err.message);
        }
    });
    

    处理堆栈

    这一节是针对支持 Error.captureStackTrace的运行环境, 例如Nodejs.

    Error.captureStackTrace 的第一个参数是 object, 第二个可选参数是一个 function. Error.captureStackTrace 会捕获堆栈信息, 并在第一个参数中创建 stack 属性来存储捕获到的堆栈信息. 如果提供了第二个参数, 该函数将作为堆栈调用的终点. 因此, 捕获到的堆栈信息将只显示该函数调用之前的信息. 这样处理方式的好处就是用来隐藏一些与用户无关的内部实现细节.

    摘自: [译]JavaScript错误处理和堆栈追踪

    相关文章

      网友评论

          本文标题:js error 打印出错误堆栈

          本文链接:https://www.haomeiwen.com/subject/mfgziqtx.html