在查看了Twisted 的Deferred
类和HeavyLifters Deferred Library之后,我注意到如果先前的结果值是Failure
该类的实例,则会触发 errbacks。这让我开始思考:是否有任何特殊原因返回一个特殊对象来表示错误,而不是仅仅抛出一个错误。
根据我的推断,我觉得最好抛出错误,因为:
- 可以抛出任何值。
- 如果抛出的值没有被捕获,它会向上传播调用堆栈。
- 不需要特殊
Failure
或Error
课程。 - 它使回调看起来更像同步代码。
- 可以在调用堆栈的任何级别处理异常。
我注意到的一些缺点是:
- 尝试代码块并捕获错误可能会导致代码性能下降。
- 如果未捕获到异常,则它会停止执行回调链的其余部分。
- 与使用 try catch 块相反,异步编程是必不可少的。
我正在尝试权衡可能性并找出哪种报告错误的方法更适合这种情况。