旧VerでjQuery.Deferredが動かないケース
2012年11月28日
jQueryの旧バージョン(v1.7.2)でDeferredが正しく動かない場合があり
最新のv1.8.3にしたら直りました、という話
最新のv1.8.3にしたら直りました、という話
まぁ、更新すりゃいいんだけなんですが
わかるまで時間が掛かる不具合なのでメモっときます
新旧で挙動に差がでるコード
例えば以下のコードを実行した場合..
$.Deferred().resolve().then(function(){
console.log(1);
}).then(function(){
console.log(2);
var d = $.Deferred();
setTimeout(function(){ d.resolve(); }, 1000);
return d;
}).then(function(){
console.log(3);
var d = $.Deferred();
setTimeout(function(){ d.resolve(); }, 1000);
return $.when(d.promise()).done(function(){
console.log(3.5);
});
}).then(function(){
console.log(4);
});
v1.8.3の正しい出力
1 2 3 3.5 4
v1.7.2の誤った出力
1 2 3 4 3.5
.. と、結果に差が出ます
原因は詳しくは追っていませんが
$.when から繋げると発生するみたいです
補足
実行環境は Google Chrome でした
v1.7.2のテストページ
JSコードはHTMLソースから
jQueryのリリースノート一覧
多分どこかで直しているんですが、パッと見て見つからなかったので放置