2009年 10月 22日

JSDeferred 0.3.0 リリース

一年ぶりぐらいにリリース http://github.com/cho45/jsdeferred/tree/release-0.3.0

Deferred.connect

を API を変えてとりこんだものです。コールバックを引数にとる任意の関数を Deferred を返す関数に変更できます。

var timeout = Deferred.connect(setTimeout, { target: window, ok: 0 });
timeout(1).next(function () {
  alert('after 1 sec');
});

Deferred#retry

これもセコンさんが実装していたやつをだいたいそのまんま入れたものです。

Deferred.retry(3, function () {
  return http.get(...);
}, { wait: 1 }).
next(function (res) {
  res // 成功したらこっち
}).
error(function (e) {
  e // 3回リトライしてもダメなときはエラー
});

Deferred.onerror

これもセコンさんが(ry

Deferred 処理中に発生した例外を全部キャッチすることができます。デバッグに便利です。デフォルトでは undefined なので、適当な関数をつっこんでください。この関数によってエラーをキャンセルしたりとかはできません。

Deferred.onerror = function (e) { if (window.console) console.log(e) };

jQuery binding への変更

これもセ(r

$.fn.deferred が追加で定義されるようになり、コールバックをとる任意の jQuery メソッドを Deferred を使うようにできます。今までは $.ajax 系のみが Deferred を返すように jQuery をいじっていましたが、このメソッドは汎用性が高くなっています。

var click = $('div').deferred('click');
loop(10, function (i) {
    console.log(i);
    return click;
});

とかやるとステップ実行が実装できそうですね (試してない)

binding/googlechrome-extensions.js

セ(rさんが作ってたやつです。http://subtech.g.hatena.ne.jp/secondlife/20091013/1255435673