deferred.then()
Deferredオブジェクトがresolve、reject、またはまだ進行(progress)している際に、呼び出されるハンドラを追加します。
- deferred.then( doneFilter [, failFilter ] [, progressFilter ] ) 1.8追加
- deferred.then( doneCallbacks, failCallbacks ) 1.5追加 1.8削除
- deferred.then( doneCallbacks, failCallbacks [, progressCallbacks] ) 1.7追加 1.8削除
- jQuery 1.8より前のバージョンについて
- jQuery 1.8のバージョンについて
- コールバックについて
- デモ
deferred.then( doneFilter [, failFilter ] [, progressFilter ] ) 1.8追加
戻り値:Promise
引数 | 説明 |
---|---|
doneFilter |
型: Deferredがresolveされた際に呼び出される関数です。 |
failFilter |
型: Deferredがrejecteされた際に呼び出される任意指定の関数です。 |
progressFilter |
型: 進行(progress)の通知をDeferredへ送信する際に呼び出される任意指定の関数です。 |
deferred.then( doneCallbacks, failCallbacks ) 1.5追加 1.8削除
戻り値:Promise
引数 | 説明 |
---|---|
doneCallbacks |
型: Deferredがresolvedした際に実行したいコールバック関数を指定します。関数の配列を指定することも可能です。 |
failCallbacks |
型: Deferredがrejectedした際に実行したいコールバック関数を指定します。関数の配列を指定することも可能です。 |
deferred.then( doneCallbacks, failCallbacks [, progressCallbacks] ) 1.7追加 1.8削除
戻り値:Promise
引数 | 説明 |
---|---|
doneCallbacks |
型: Deferredがresolvedした際に実行したいコールバック関数を指定します。関数の配列を指定することも可能です。 |
failCallbacks |
型: Deferredがrejectedした際に実行したいコールバック関数を指定します。関数の配列を指定することも可能です。 |
progressCallbacks |
型: 進行(progress)の通知をDeferredへ送信する際に実行したいコールバック関数を指定します。関数の配列を指定することも可能です。 |
jQuery 1.8より前のバージョンについて
jQuery1.8より前のバージョンでは、引数は関数または関数の配列にすることが出来ました。
そのタイプのコールバックが必要無い場合は、引数をnull
にすることが出来ます。
代わりに.done()
、.fail()
または.progress()
を、
ステータスまたは値のフィルタリング無しにコールバックの1つのタイプとして設定するのに使用します。
jQuery 1.8のバージョンについて
jQuery1.8では、deferred.then()
メソッドは、現在非推奨のdeferred.pipe()
に置き換わり、
関数を通じてステータスとdeferredの値をフィルター出来る新しいpromiseを返します。
doneFilter
とfailFilter
の関数は、元のDeferredのresolve/rejectのステータスと値をフィルターします。
progressFilter
関数は、元のDeferredのnotify
またはnotifyWith
メソッドの呼び出しをフィルターします。
これらのフィルター関数は、promiseの.done()
または.fail()
コールバックに沿って渡される新しい値を返すことが出来ます。
またはpromiseのコールバックへresolve/rejectのステータスと値を渡す別のObservableなオブジェクト(Deferred、Promise等)を返すことも可能です。
もしフィルター関数がnull
、または指定されていなければ、
promiseは元と同じ値であるとしてresolveまたはrejectされます。
コールバックについて
コールバックは追加された順に実行されます。
deferred.then
はPromiseを返すため、
追加の.then()
メソッドを含めて、Promiseオブジェクトの他のメソッドにこれを繋げる事が可能です。
デモ
.getメソッドはDeferredオブジェクトから引き出されるjqXHRオブジェクトを返すため、
.then
メソッドを使用してハンドラーを割り当てることが出来ます。
$.get( "test.php" ).then(
function() {
alert( "$.get 成功" );
}, function() {
alert( "$.get 失敗!" );
}
);
下記は、resolve値をフィルターしている例です。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>deferred.then demo</title>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button>Filter Resolve</button>
<p></p>
<script>
var filterResolve = function() {
var defer = $.Deferred(),
filtered = defer.then(function( value ) {
return value * 2;
});
defer.resolve( 5 );
filtered.done(function( value ) {
$( "p" ).html( "Value is ( 2*5 = ) 10: " + value );
});
};
$( "button" ).on( "click", filterResolve );
</script>
</body>
</html>
下記は、リジェクト値をフィルターする例です。
var defer = $.Deferred(),
filtered = defer.then( null, function( value ) {
return value * 3;
});
defer.reject( 6 );
filtered.fail(function( value ) {
alert( "Value is ( 3*6 = ) 18: " + value );
});
下記は、チェインタスクの例です。
var request = $.ajax( url, { dataType: "json" } ),
chained = request.then(function( data ) {
return $.ajax( url2, { data: { user: data.userId } } );
});
chained.done(function( data ) {
// 最初のリクエストによって提供されるものとして、
// url2からdataを取得します。
});
© 2010 - 2017 STUDIO KINGDOM