2009年10月17日土曜日

dojo.Deferred

JavaScriptにはスレッドがありません。時間のかかる処理をするにはsetTimeoutを使った疑似スレッドを使うことになります。
すると今度は完了待ちのための手段が大変です。いくつかの処理が終わったら最後にこれをする、とかあるわけです。
そんなときのための対策にこんな関数を用意して使っていました。

// ちょー適当な関数名…
function doat(count, func) {
return function() {
if( --count == 0 )
func();
};
}
この関数は関数を返します。返ってきた関数はcount回呼び出すとfuncを呼びます。
これで、各疑似スレッドに返ってきた関数を呼び出させれば、最後に終わったスレッドがfuncを実行してくれるわけです。

でもdojoにdojo.Deferredクラスを見つけました。dojo的にはこっちを使うみたいです。
まだ使い慣れていませんが、そのうちこっちに乗り換えよう…。