オブジェクトを変数に保存し、その変数で1つ以上の遅延メソッドを呼び出してチェーンしようとするときと、遅延オブジェクトを直接チェーンしようとすると、異なる動作が得られる理由を理解したいと思っています。
オブジェクトを変数に保存する場合、各関数に送信される値は同じです (以下のコード スニペットの場合は 5)。つまり、この場合、値はフィルタリングされません。Deferred.pipe()
直接連鎖すると、値はフィルター処理されます...そのため、いくつかの異なるステートメントでa を設定するときに get フィルター処理がどのように行われるかはわかりません。そして、jquery docsを読むことで、それが可能になるはずです:
Deferred オブジェクトは、jQuery オブジェクトがチェーン可能であるのと同様にチェーン可能ですが、独自のメソッドがあります。Deferred オブジェクトを作成した後、オブジェクトの作成から直接チェーンするか、オブジェクトを変数に保存し、その変数で 1 つ以上のメソッドを呼び出すことにより、以下のメソッドのいずれかを使用できます。
私は何を間違っていますか?
これが私のコードです:
<script type="text/javascript">
$(document).ready(function () {
// This works as expected - alert(20)
var defer = new $.Deferred();
defer.pipe(myFunction).pipe(myFunction).pipe(myAlert);
defer.resolve(5);
// This does not work as expected - alert(5)
var defer2 = new $.Deferred();
defer2.pipe(myFunction);
defer2.pipe(myFunction);
defer2.pipe(myAlert);
defer2.resolve(5);
});
var myFunction = function (value) {
return value * 2;
}
var myAlert = function (value) {
alert('The value is ' + value);
}
</script>