deferred.then()【《Deferred 成功処理・失敗処理・状態通知》ハンドラ追加】 1.5 / 1.7 / 1.8 (1.8)
メモ
- Deferred オブジェクトの成功処理・失敗処理・状態通知 の各ハンドラ追加
- Promise オブジェクトが返却される為、メソッドチェーンが可能
- 不要なハンドラは、省略 または null 指定
または、下記で個別にハンドラ追加
deferred.done()【《Deferred 成功処理》ハンドラ追加】
deferred.fail()【《Deferred 失敗処理》ハンドラ追加】
deferred.progress()【《Deferred 状態通知》ハンドラ追加】
- jQuery 1.8 以降
- ハンドラの配列指定は不可
- deferred.pipe()【《Deferred 成功処理・失敗処理・状態通知》ハンドラ追加】 1.6 / 1.71.8 の代替
- ハンドラ内でDeferred オブジェクト・Promise オブジェクト等を新規生成し返却することで状態の変更可
- その他詳細については、状態管理・非同期処理 (Deferred Object) を参照
構文
説明 | 構文 | 戻り値 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
《Deferred 成功処理・失敗処理・状態通知》 ハンドラ追加 | deferred.then( doneFilter [, failFilter ] [, progressFilter ] ) 1.8 Function() doneFilter:成功処理ハンドラ (null:省略) Function() failFilter:失敗処理ハンドラ (null:省略) Function() progressFilter:状態通知ハンドラ (null:省略)
| Promise | ||||||||
deferred.then( doneCallbacks, failCallbacks ) 1.51.8 Function() | Array Function() doneCallbacks:成功処理ハンドラ Function() | Array Function() failCallbacks:失敗処理ハンドラ
| Promise | |||||||||
deferred.then( doneCallbacks, failCallbacks [, progressCallbacks ] ) 1.71.8 Function() | Array Function() doneCallbacks:成功処理ハンドラ Function() | Array Function() failCallbacks:失敗処理ハンドラ Function() | Array Function() progressCallbacks:状態通知ハンドラ
| Promise |
関連
例
<p id="output1" style="border:1px black solid; padding:1px 5px;">【状態変更なし】</p>
<p id="output2" style="border:1px black solid; padding:1px 5px;">【状態変更あり】</p>
<script>
var doneCallbackA1 = function() { $("#output1").append("<br>done (A1)"); };
var doneCallbackA2 = function() { $("#output1").append("<br>done (A2)"); };
var failCallbackA = function() { $("#output1").append("<br>fail (A)"); };
var doneCallbackB1 = function() {
$("#output2").append("<br>done (B1)");
var dfNew = $.Deferred();
dfNew.reject();
return dfNew;
};
var doneCallbackB2 = function() { $("#output2").append("<br>done (B2)"); };
var failCallbackB = function() { $("#output2").append("<br>fail (B)"); };
// 状態変更なし
var df1 = $.Deferred();
$.when(df1)
.then(doneCallbackA1)
.then(doneCallbackA2)
.catch(failCallbackA);
df1.resolve();
// 状態変更あり
var df2 = $.Deferred();
$.when(df2)
.then(doneCallbackB1)
.then(doneCallbackB2)
.catch(failCallbackB);
df2.resolve();
</script>
【状態変更なし】
【状態変更あり】