Node.js的异步编程中,如何抛出异常?

在学习Node.js的官方文档File System的时候,看到一段代码:

const fs = require('fs');

fs.unlink('/tmp/hello', (err) => {
  if (err) throw err;
  console.log('successfully deleted /tmp/hello');
});

这种处理异常的方式应该是不正确的.因为throw err抛出异常的方式,只适用于try/catch方式.
于是我想到的解决方案是:

  1. 使用domain的方式进行解决(不方便,因为具体的error希望具体进行处理)

  2. 继承Events, 然后通过event.on('error', callback)进行error的捕捉(不方便,适用于自定义的函数,而非系统已有的)

那么问题是:

  1. 这种异常通常如何进行处理?

阅读 8.2k
6 个回答

异步不能捕捉异常,需要在回调里传入一个err对象或者提供一个异常回调,如有错误请指正。

用promise传递出来

好像可以这样

Promise.resolve()
  .then(() => {
    fs.unlink('/tmp/hello', (err) => {
      if (err) throw err;
      console.log('successfully deleted /tmp/hello');
    });
  })
  .catch(err => {

  });

Promise reject 的结果就在catch 里面了

新手上路,请多包涵

传统的callback处理方法是总是将callback的第一个参数作为err传递

function foo(file, cb) {
  fs.unlink(file, err => {
    if (err) {
      return cb(err);
    }
    console.log('blabla');
  });
}

不throw不就行了么。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题