日頃、もちもちな Deferred に慣れてるせいか、jQuery.Deferred があまりに使い難いので作ってみました
JSDeferred でもよかったのですが、エラー処理が楽なので伝統を継承する感じで。
dojo や Closure Library などの Deferred は MochiKit.Async.Deferred からの派生なので、汎用性はあると思います。
基本的な使い方は GitHub に書いてありますので参考ください。
addCallback() とか addErrback() などの 他の機能については MochiKit.Async と同じなのでリファレンスを参考ください
バグとか問題等ありましたら issues または、Twitter @polygon_planet までご報告ください
JSDeferred でもよかったのですが、エラー処理が楽なので伝統を継承する感じで。
dojo や Closure Library などの Deferred は MochiKit.Async.Deferred からの派生なので、汎用性はあると思います。
機能概要
- jQuery.Deferred 本体に機能を追加してるだけなので、本来の機能 .done() とかはそのまま使えて他のプラグインも普通に動く(と思う)
- minify版 5KB とけっこう軽量
- jQueryオブジェクトに async という関数オブジェクトが追加される
- Deferred は、今までどおり
var d = $.Deferred();
で生成 - たぶん古い環境でも動く
Download
使い方
スクリプトを読み込みます<script src="/path/to/jquery.async.js"></script> or <script src="/path/to/jquery.async.min.js"></script>
基本の Deferred チェイン:
var d = $.Deferred(); d.addCallback(function() { return 1; }).addCallback(function(res) { console.log(res); // 1 }); d.callback();
succeed() を使った例:
$.async.succeed(1).addCallback(function(res) { return res + 1; }).addCallback(function(res) { console.log(res); // 2 });
値の受け渡しと、エラー処理:
$.async(function() { return 1; }).addCallback(function(res) { console.log(res); // 1 throw new Error('error'); }).addCallback(function(res) { console.log('このメッセージは表示されない'); return 'noop'; }).addErrback(function(err) { console.log(err); // error return 'hello'; }).addBoth(function(res) { console.log(res); // hello });
$.async()
は、引数の関数を非同期で実行して新しい Deferred チェインを作ります。JSDeferred でいう next() みたいな感じ。
基本的な使い方は GitHub に書いてありますので参考ください。
addCallback() とか addErrback() などの 他の機能については MochiKit.Async と同じなのでリファレンスを参考ください
バグとか問題等ありましたら issues または、Twitter @polygon_planet までご報告ください