素材牛VIP会员
Node.js的异步编程中,如何抛出异常?
 钢***侠  分类:Node.js  人气:835  回帖:6  发布于6年前 收藏

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

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv4 码徒
gu***un UI设计师 6年前#1

Promise reject 的结果就在catch 里面了

Lv7 码师
亡***师 JS工程师 6年前#2

好像可以这样

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

  });
Lv6 码匠
轩***室 学生 6年前#3

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

function foo(file, cb) {
  fs.unlink(file, err => {
    if (err) {
      return cb(err);
    }
    console.log('blabla');
  });
}
Lv3 码奴
路***侠 JS工程师 6年前#4

用promise传递出来

Lv3 码奴
赵***3 移动开发工程师 6年前#5

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

Lv5 码农
飞***a 交互设计师 6年前#6

不throw不就行了么。。。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取