在学习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方式.
于是我想到的解决方案是:
使用domain的方式进行解决(不方便,因为具体的error希望具体进行处理)
继承Events, 然后通过event.on('error', callback)进行error的捕捉(不方便,适用于自定义的函数,而非系统已有的)
那么问题是:
这种异常通常如何进行处理?
用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 => {
});