函数式编程中为什么错误难以捕获
- 当
函数们通过compose或者composeAsync方法(点击这里查看我上一篇关于函数式编程的文章)组成之后其本身也是一个函数。
- 函数接收的参数是无法来中断这个函数的执行的
- 可中断函数执行的方法很少
- 用来组成
compose的函数们自身也有可能出错
可以使用哪些方法捕获错误
- 可以写两个工具函数,一个是可以将接受的函数通过
maybe函子包裹之后在返回;另外一个是与之对应的,也同样接受一个函数,不过这个函数接受的参数会自动通过.of()的方式去获取,然后正常使用
- 写一个工具函数,用来判断接受的参数是否合规,不合规直接通过
throw的方式主动抛出一个错误来中断函数执行
个人想法
- 肯定还有其他更加合理且优雅的方式来捕获错误,只是我目前没有发现而已
- 第一种方式相对于第二种来说其实更加符合函数式编程的规范,而且在这里好歹也用到了一点关于
涵子的知识。但是使用这种方式的话,就会造成compose方法使用时比较怪异。不过使用这种方式来处理错误捕获是我下一步的目标
目前我所采用的是通过抛出异常的方式
throw方法可以直接中断函数执行,在性能上也是有稍稍稍微的优势的
- 简单,粗暴,有用
- 工具函数
export const maybeBreak = curry((func: Function, arg: any) => {
if (!arg || arg instanceof Promise) throw `函数: ${func.name} 因参数问题执行失败`;
return func(arg);
});
const rejectWithdrawCurried = curry((arg: string, close: () => void) => {
composeAsync<string, void>(
verifyRejectCause,
maybeBreak(rejectWithdrawRequest),
responseAfter,
)(arg);
});