@0tofuの備忘録...

プログラミングとか仕事の話とかFIT3 RS(GK5)のメンテナンス記録等の雑記

jQuery Deferredのもっとも初歩的な使い方

例えばコンソールに2秒後に'foo'さらに1秒後に'bar'を出力したいとする。
それを単純にJavaScriptで書いて実行すると…

bar
foo 

 と、'bar'が先に表示されてしまう。

これを'foo'の後に'bar'が表示されるようにするには…以下のコードに修正すれば良い。

しかし、上記コードはJavaScriptでよくあるコールバック地獄に陥ってしまう。

 

そこで登場するのが'jQuery.Deferred'である。

$settimeoutという関数を定義する。内容はこんな感じ
1.new $.Deferred()でDeferredオブジェクトを生成
2.通常のsetTimeoutと同様に処理を定義。
 この時、処理終了後にDefferdオブジェクトのresolve()を設定
 (resolve->処理が正常終了したことを後続処理に通知する)
3.promise()オブジェクトを関数の戻り値として定義

promise()オブジェクトは処理結果教えるからとりあえず処理止めてて!
と伝えるもなので、実際はreturn promise()が先に実行されている。

その後、処理成功時はresolve()、処理失敗時はreject()を呼び出すことにより
後続処理が実行される。

以上、自分用メモでした。