zoukankan      html  css  js  c++  java
  • nodejs异常

    js中的异常处理语句有两个,一个是try……catch……,一个是throw。

    try……catch用于语法错误,错误有name和message两个属性。throw用于逻辑错误。

    对于逻辑错误,js是不会抛出异常的,也就是说,用try catch没有用。这种时候,需要自己创建error对象的实例,然后用throw抛出异常。

    用throw抛出异常,需要自己现实例化一个error

    注意:throw要用new关键字初始化一个Error,E要大写。同时,这个Error是异常里面的message属性!

    try{
        var num=1/0;
        if(num=Infinity){
            throw new Error("Error大写,用new初始化-->除数不能为0");
        }
    }
    catch(exception){
        console.log(exception.message);
    }


    用uncaughtException


    我们可以uncaughtException来全局捕获未捕获的Error,同时你还可以将此函数的调用栈打印出来,捕获之后可以有效防止node进程退出,如: 

     

    1.  
      process.on('uncaughtException', function (err) {
    2.  
      //打印出错误
    3.  
      console.log(err);
    4.  
      //打印出错误的调用栈方便调试
    5.  
      console.log(err.stack);
    6.  
      });


    这相当于在node进程内部进行守护, 但这种方法很多人都是不提倡的,说明你还不能完全掌控Node.JS的异常。 

    有一个事件,可以捕捉这种错误:uncaughtException

    在 uncaughtException 当一个未捕获的 JavaScript 异常堆满回到事件循环一路发出事件。默认情况下,Node.js 通过打印堆栈跟踪 stderr 和退出来处理这些异常。为该 uncaughtException 事件添加处理程序会覆盖此默认行为。

    1
    2
    3
    4
    5
    6
    7
    8
    const fs = require('fs');
    const stream = fs.createReadStream('./aaa');

    console.log('A'); // 输出了

    process.on('uncaughtException', (err) => {
    console.error(err);
    });

    这不知情下, uncaughtException 的作用非常大,特别是在持续性的服务里,使用它来监听任何一个错误的信息(输出到日志文件里)。

    1
    2
    3
    process.on('uncaughtException', (err) => {
    log('error')(err);
    });

    同步错误

    如果同步操作发生错误,Nodejs 进程会怎样?这个问题的答案是 Nodejs 进程直接退出(非零码)。

    1
    2
    3
    4
    5
    6
    7
    JSON.parse("aaaaa:11");

    console.log('A'); // 没有输出

    process.on('uncaughtException', (err) => {
    console.error(err); // 没反应
    });

    并且这种错误,使用 uncaughtException 无法捕捉,唯一能捕捉的是 try/catch。

    1
    2
    3
    4
    5
    6
    7
    8
    try {
    JSON.parse("aaaaa:11");
    }
    catch(err) {
    console.log(err);
    }

    console.log('A'); // 输出了

    但是 try-catch 不适用于异步回调,未处理的 Promise 或流,但适用于 async,await。

    记住

    永远也不让 Nodejs 崩溃这个是许多玩家的终极目标,那么请记住:

    • 始终处理 Promise reject。并始终使用 new Error 来拒绝 Promise,以获取堆栈跟踪!
    • 始终处理 error 流的事件!这个非常重要会导致进程直接崩盘。
    • JSON.parse() 和 *Sync API 等同步函数,都可以在 try/catch 中捕捉错误,如果没有捕捉那将是致命的。

    https://blog.csdn.net/sd19871122/article/details/85071658

    https://www.dazhuanlan.com/2019/10/17/5da79c3da370d/

  • 相关阅读:
    sopt:一个简单的python最优化库
    条件GAN论文简单解读
    python PIL 图像处理库简介(一)
    python自动制作gif并添加文字
    github+hexo搭建博客
    haskell简明入门(一)
    DCGAN 代码简单解读
    手机浏览器 H5直播
    js获取网页的宽高
    vue 对象赋值 对象身上已经有了属性,但是视图层并没有更新该数据 问题
  • 原文地址:https://www.cnblogs.com/youxin/p/14810449.html
Copyright © 2011-2022 走看看