jQuery1.12対応。使い方、入門、サンプル、ノウハウをとことん極めた最強ブログ。2016/05/07deferred.state()、resolve()、reject()、done()、fail()を検証してみる前の記事で、Deferred使う事の理由を述べましたが、具体的な使い方を書いて行こうと思います。今回はstate()状態について、そしてその状態による分岐、主なdeferred検証観点はstate()、resolve()、reject()、done()、fail()を使用。jQueryバージョン1.7まではisResolvedとisRejectedというメソッドがありましたが、1.8からは廃止となりました。deferred.state()を使っていくものとします。一般的な単語としてのpendingは「保留」、rejectは「拒否」という言葉が良く思い浮かびますが、jQuery.Deferredにおいては「未解決」というニュアンスが強いので「未解決」という言葉を使っていきます。同じ理由としてrejectの「拒否」についても「却下」という言葉を使っていきます。deferred状態の検証サンプルコード文章だけでは、やはり分かりにくいのでdeferredサンプルコードをもとに説明していきます。ここで.resolve()をもう一回してみる、今度は引数付き。</ul></body></html>※state()、resolve()、reject()、done()、fail()のjQueryサンプルの結果と照らし合わせてみると分かりやすいです[1]Deferredオブジェクト作成直後に.state()の結果は未解決となります[2].resolve()の後に.state()の結果は解決済みとなります[3]解決済みなので、Deferredコールバックの移動先は.done()となります、ただし.resolve()の時に引数の指定が何も無かったので、当然.done()で引数は取れず出力結果はundefinedです[4]プロミスの場合も.resolve()で引数指定してなかったので、やはり結果は[3]と同じ[5]解決済みなので、Deferredコールバックは.fail()には行きません[6]プロミスの場合も解決済みになっている事には変わりないので、やはり結果は[5]と同じ[7]ここで一度.resolve()引数無しにしたDeferredオブジェクトに今度は.resolve()引数有りにしてみるが、1回目で引数を指定していなかったんで、.done()で引数は受け取れず[8]プロミスの場合も1回目で引数を指定してないと、2回目でも取れない。[9].resolve()の後に.reject()、つまり解決済みの後に却下をして解決済みものまま。[10]新規Deferredオブジェクト作成直後に.reject()をすれば、状態は却下となる。[11]却下なので、Deferredコールバックは.done()には行きません[12]却下なので、Deferredコールバックはの移動先は.fail()となり、.reject()で引数を指定しているので、引数の値を受けとる事が出来ますstate()、resolve()、reject()、done()、fail()のjQueryサンプルの結果これらの検証で分かる事は、一度.resolve()や.reject()したDeferredオブジェクトの状態はもう変わらず、引数についても同じという事でしょうか。コメントをキャンセルメールアドレスが公開されることはありません。購読するプロフィール元システムエンジニア。最近フロントエンド開発に興味が出てきてjQuery無双なるブログを立ち上げる。趣味はカメラ(メイン機:Canon6D)でシャッターチャンスは逃さないがモットー。jQuery1.12対応。使い方、入門、サンプル、ノウハウをとことん極めた最強ブログ。