@xfe-team/catch-error
通过装饰器或包裹的形式捕获异常, forked from catch-decorator
安装
yarn add @xfe-team/catch-error
使用
以前的形式:
class Messenger {
async getMessages() {
try {
await api.getData() // <-- can throw ServerError
} catch(err) {
...
}
}
}
通过当前工具我们可以这样:
import catchError from '@xfe-team/catch-error';
class Messenger {
@catchError(ServerError, handler)
async getMessages() {
await api.getData() // <-- can throw custom ServerError
}
}
我们可以捕获所有的 Error 异常:
import catchError from '@xfe-team/catch-error';
class Messenger {
@catchError(Error, (err: any) => console.log(err.message))
getMessages() {
throw new TypeError('ReferenceError here!');
...
}
}
由于部分不标准的第三方库可能直接 throw 'invalid type'
抛出非 Error 类型的错误, 我们可以用 *
捕获异常:
import catchError from '@xfe-team/catch-error';
class Messenger {
@catchError('*', (err: any) => {/* 处理相关异常 */})
getMessages() {
throw new TypeError('ReferenceError here!');
...
}
}
有一些情况下我们希望容错, 吃掉所有异常, 不让异常向上抛: import catchError from '@xfe-team/catch-error';
class Messenger {
@catchError('*')
getMessages() {
throw new ReferenceError('ReferenceError here!')
...
}
}
我们还可以通过这样形式分别处理不同类型的异常:
import catchError from '@xfe-team/catch-error';
class Messenger {
@catchError(TypeError, (err, ctx) => {...})
@catchError(ReferenceError, (err, ctx) => {...})
getMessages() {
throw new ReferenceError('ReferenceError here!')
...
}
}
也能够支持异步场景:
class Messenger {
errorMessage = null
@catchError(ServerError, (err, ctx) => ctx.errorMessage = err.message)
getMessages() {
return fetch(myRequest).then(response => { // can throw ServerError
...
})
}
}
为了代码整洁, 我们不希望使用匿名函数:
class Messenger {
onServerError(error) {
/* 在这里处理异常 */
}
@catchError(ServerError, 'onServerError')
getMessages() {
return fetch(myRequest).then(response => { // can throw ServerError
...
})
}
}
class Messenger {
onServerError(error) {
/* 在这里处理异常 */
}
@catchError(ServerError, (err, ctx)=> ctx.onServerError(error))
getMessages() {
return fetch(myRequest).then(response => { // can throw ServerError
...
})
}
}
ChangeLog
0.0.3 (2019-12-09)
- fix: 修复 errorClass 错误写成 error 的 typo 问题
- remove: 移除 errorClass 作为独立 function 的场景
0.0.1 (2019-12-09)
- feat: init commit
作者
She Ailun
enkot (原作者)