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

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. 这种异常通常如何进行处理?


用promise传递出来


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


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

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

Promise reject 的结果就在catch 里面了


不throw不就行了么。。。


好像可以这样

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

  });
【热门文章】
【热门文章】