読者です 読者をやめる 読者になる 読者になる

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");
});

結果は以下。

f:id:k_maru:20120623193934p:plain

deferred 単品で(pipeとかwhenとか無しに)使うことなんて無いんじゃないかって結果ですね。
ただ、さっき GitHub から開発中の jQuery のソースをとってきたら、 then に現在の pipe 相当のコードが記述されて、 pipe は then のシンタックスシュガーになってました。次のバージョンからは then で処理をつなげられるようになるのかもしれません。