Twisted のDeferred
クラスとHeavyLifters Deferred Libraryを見た後、前の結果の値がFailure
クラスのインスタンスである場合、エラーバックが発生することに気付きました。これにより、エラーをスローするのではなく、エラーを示す特別なオブジェクトを返す特定の理由があるのではないかと考えました。
私が推測したことから、次の理由により、エラーをスローする方が良いと感じています。
- 任意の値をスローできます。
- スローされた値がキャッチされない場合は、コール スタックを伝播します。
- 特別なクラス
Failure
やError
クラスは必要ありません。 - これにより、コールバックが同期コードのように見えます。
- 例外は、コール スタックの任意のレベルで処理できます。
私が気づいたいくつかの欠点は次のとおりです。
- コードのブロックを試行してエラーをキャッチすると、コードのパフォーマンスが低下する可能性があります。
- 例外がキャッチされない場合、残りのコールバック チェーンの実行が停止します。
- 非同期プログラミングは、try catch ブロックの使用とは正反対に不可欠です。
私はオッズを比較検討し、このシナリオでエラーを報告するのに適した方法を見つけようとしています。