search

Home  >  Q&A  >  body text

javascript - Node.js 异步异常如何处理?

在看《深入浅出Node.js》的时候,书上第四章,有句话:“Node在处理异常上形成了一种约定,将异常作为回调函数的第一个实参传回,如果为空值,则表明异步调用没有异常抛出。”

这句话下也有个简短的例子,本人刚学Node,感觉这句话好绕口。有没有更详细的例子?

迷茫迷茫2822 days ago366

reply all(5)I'll reply

  • PHPz

    PHPz2017-04-10 15:21:29

    这句话指的是如下这种情况:

    fs.readFile('/etc/passwd', function (err, data) {
      if (err) {
        // 判断是否发生错误,并做相应的处理
      } 
      else {
        console.log(data); // 处理结果
      }
    });
    

    基本上node的异步api都有这样的约定,即最后一个参数为一个回调函数,这个回调函数的第一个参数表示异步操作的过程中是否发生异常,第二个参数表示异步操作的结果。

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 15:21:29

    补充
    ============
    如果需要抛出异常:

    function doSomething(a, callback) {
      if(! a) {
        return callback(new Error('params error.')); //回调传入 Error
      }
      var b = a++;
      return callback(null, b);// 无异常
    }
    

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 15:21:29

    一大堆的function (err, xx, xx) {}来袭

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:21:29

    callback第一个参数为error,不是规定的规定

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 15:21:29

    这是有err的情况,就是回调函数的第一个参数

    jsclient.on('line',function(err,data){
        if(err){
            console.log(err);
        }else
            console.log(data)
    });
    

    这是回调没有抛出异常的情况

    jsclient.on('data',funciton(data){
        console.log(data);
    })
    

    这是没有回调参数的情况

    jsclient.on('end',function(){ console.log('end')})
    

    reply
    0
  • Cancelreply