単純なDeferredオブジェクトを作成しましょう。
defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});
上記のDeferredオブジェクトは3秒間「保留中」の状態になり、その後「解決済み」の状態に切り替わります(この時点で、それにバインドされているすべてのコールバックが呼び出されます)。
また、そのDeferredオブジェクトのpromiseを取得してみましょう。
promise = defer.promise();
ここで、Deferredオブジェクトが解決されたときに呼び出されるコールバックを追加するには、.done()
またはを使用できます.then()
。ただし、このメソッドは、Deferredオブジェクト自体または独自のpromiseオブジェクトの両方で呼び出すことができます。
defer.then( handler );
また
promise.then( handler );
どちらの場合も、handler
関数が呼び出されます(この場合は3秒後)。
を使用する$.when
と、Deferredオブジェクト自体またはそのpromiseオブジェクトを再度渡すことができます。
$.when( defer ).then( handler );
また
$.when( promise ).then( handler );
繰り返しますが、上記の2行のコードに違いはありません。
ライブデモ: http: //jsfiddle.net/G6Ad6/
だから、私の質問は、Deferredオブジェクト自体.then()
で.done()
、などを呼び出すことができ、そのDeferredオブジェクトをに渡すことができるので、promiseオブジェクトを取得する$.when()
ポイントは何ですか?.promise()
promiseオブジェクトの目的は何ですか?機能にこの冗長性があるのはなぜですか?