jQuery Deferredオブジェクトのサンプル

jQueryのDeferredオブジェクトのサンプルです。

目次

Deferredオブジェクト

  • jQueryにある機能で、Deferredオブジェクトを生成して使用します。
  • resolveでDeferredオブジェクトの状態を解決済み(resolved)にします。
  • rejectでDeferredオブジェクトの状態を棄却済み(rejected)にします。
  • thenの後の1つめの関数はdoneになります。Deferredオブジェクトが解決済み(resolved)の場合実行されます。
  • thenの後の2つめの関数はfailになります。Deferredオブジェクトが棄却済み(rejected)の場合実行されます。
  • 以下はjQueryのDeferredのリンクです。
    http://api.jquery.com/jQuery.Deferred/

Deferredオブジェクトを使用したサンプル

Deferredオブジェクトを使用したサンプルです。 
ボタンを何回か押すと文字列が変わります。

何回かボタンを押して下さい

結果

コード

上記コードのサンプルです。

3行目のボタンをクリックすると8行目から実行されます。
10行目は、21行目の関数を実行します。

25,26行目の結果(0か1)によって31行目のresolveまたは33行目のrejectを実行します。
12~17行目は、上記の結果がresolveのときは13行目、rejectのときは16行目が実行されます。

<p id="p1">何回かボタンを押して下さい</p>
<p id="p2">結果</p>
<input type="button" id="button1" value="ボタン1">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(function(){
	$('#button1').on('click',function(){

	const promise1 = test1();

	promise1.then(function(){
		$("#p2").text("成功しました"); //

	},function(){
		$("#p2").text("失敗しました"); //
	});
  });
});

const test1 = function(){

	const df = $.Deferred();

	const rand = Math.random();
	const num = Math.floor(rand*2)// 0か1

	$("#p1").text("値は" + num + 'です'); // 0か1

	if(num===0){
		df.resolve(); //解決
	}else if(num==1){
		df.reject(); // 却下
	}
	$("#button1").blur(); //フォーカスをはずす

	return df.promise();
};
</script>

12行目は、test1関数の結果を受けて、resolveであれば13行目を実行します。
rejectであれば16行目を実行します。
21行目は、無名関数です。
23行目は、Deferredオブジェクトを生成しています。
25,26行目は、0または1を返します。
31行目は、サンプルとして値が0のときは解決済み(resolve)としています。
33行目は、サンプルとして値が1のときは却下(reject)としています。
37行目は、Deferredのpromiseオブジェクトを返します。

関連の記事

jQuery $.ajaxで通信を行ってJSONを取得するサンプル
jQuery 属性値を取得/設定するサンプル(attr)
jQuery textメソッドとhtmlメソッドの違いのサンプル
jQuery ループ処理を行うサンプル(each)

△上に戻る