更新: ドキュメントが正確で最新であるため、この質問は現在古くなっています。
私は jQuery Deferred/Promise API を少し調べてきましたが、哲学的および jQuery ドキュメントの と の違いについて非常に混乱していpipe()
ますthen()
。jQuery 1.8 の時点で、pipe() は then() の単なるエイリアスであることがわかりました。
jQuery ソースから:
// Keep pipe for back-compat
promise.pipe = promise.then;
しかし、ドキュメンテーションはpipe()
とthen()
では完全に異なります。
の説明then()
:
説明: Deferred オブジェクトが解決または拒否されたときに呼び出されるハンドラーを追加します。
の説明pipe()
:
説明: Deferred をフィルタリングおよび/またはチェーンするためのユーティリティ メソッド。
歴史的に、それらはわずかに異なる動作をしていたことを理解していますが、pipe のドキュメント全体またはthenのドキュメント全体では、これら 2 つの関数が現在まったく同じことを行うとさえ言っていません。
だから、ここに私の2つの部分からなる質問があります:
- jQuery 1.8 の時点でと の間
pipe()
でドキュメントが異なるのはなぜですか?then()
- が新しい遅延オブジェクト
then()
を返すのはなぜですか? この動作は完全に文書化されていません (ドキュメントでは、新しいものではなく、Deferred を返すとだけ書かれています)。そうすることには有用性があることを理解しています(つまり、のすべての機能を実装することです)が、哲学的にはなぜそうなのですか?(to attach handlers)の説明を考えると不要です。pipe()
then()
アップデート
then()
私は、ドキュメントが誤解を招き、不正確であるとさえ言います:
deferred.thenは deferred object を返すため、追加の .then() メソッドを含め、遅延オブジェクトの他のメソッドをこのメソッドにチェーンできます。
漠然としているだけかもしれませんがthen()
、実際にはまったく新しいオブジェクトを返すのに、連鎖のために呼び出した遅延オブジェクトを返すことを暗示しています....
再更新
ドキュメントが単に間違っている/古くなっているようです! これが、ドキュメントがそれらが同じものであると言及していない理由の答えです。しかし、私の 2 番目の質問はまだ残っています。その理由は、単純にそれと同等にすることができるように、新しい遅延をthen()
返しますか?pipe()