[js] buildErrorHandler
프로젝트 공통에서 계층 구조적으로 에러를 핸들링하고자 하고자 한다면 buildErrorHandler
함수를 이용할 수 있다
import {find, path} from 'ramda'
export interface ErrorHandler {
pred: (error: any) => boolean | any
handler: ((error: any) => any) | any
}
export function buildErrorHandler(handlers: () => ErrorHandler[], pathArr: any[] = []){
return (e) => {
if(!handlers()){
console.log({...e})
console.error(e)
console.log(handlers.toString())
throw Error('handlers() return undefined')
}
const errHandler: ErrorHandler = find(({pred}) => pred(path(pathArr, e)))(handlers())
if(!errHandler){
console.log('[buildErrorHandler] Matched error handler not found')
throw e
}
return errHandler.handler(e)
}
}
구체적인 설명은 귀찮아서 생략한다.