jQuery の Deferred の then について
この内容は jQuery 1.7.2 を元に記述しています。
「jQuery の Deferred でのエラー処理 その(1)」で
Deferred のインターフェイス的にはなんとなく、 then で繋いでいって、 done / fail で最後処理をするように見受けられます。
って書いてましたが、よくよく調べるとまったくそんなことは無かったです。 then はただ単純に deferred が resolve / reject / notify された時に呼び出されるコールバック関数をキューに登録するだけでした。done / fail / notify の各関数も同じでした。
ってことで、こんなコードを書いても、上から順番に関数が呼び出されるだけです。
async("Test", 1000).then(function(e){ console.log("then 1"); }).then(function(e){ console.log("then 2"); }).done(function(e){ console.log("done 1"); }).then(function(e){ console.log("then 3"); }).done(function(e){ console.log("done 2"); });
結果は以下。
deferred 単品で(pipeとかwhenとか無しに)使うことなんて無いんじゃないかって結果ですね。
ただ、さっき GitHub から開発中の jQuery のソースをとってきたら、 then に現在の pipe 相当のコードが記述されて、 pipe は then のシンタックスシュガーになってました。次のバージョンからは then で処理をつなげられるようになるのかもしれません。