« 独自ドメインにおける DNS の設定 | メイン | Japanize - サブドメインの翻訳について仕様変更のおしらせ »
2006年11月30日
JavaScript で非同期処理
setTimeout って、JavaScript の黒歴史だよね、ってのはおいといて。IT戦記 - 関数を非同期化して汎用性を高めるを見て、おもしろそうだったので汎用化してみました。でも、あまり実用性がなさそうです。
function async(wait) {
if (arguments.length == 1) return;
var conn = arguments[arguments.length - 1];
for (var i = arguments.length - 2; i != 0; i--) {
conn = (function (f, c) {
return function () {
var args = [ f.apply(null, arguments) ];
setTimeout(
function () {
c.apply(null, args);
},
wait);
};
})(arguments[i], conn);
}
conn();
}
async(
10,
function () { return 'a'; },
function (x) { return x + 'b'; },
function (x) { return x + 'c'; },
function (x) { alert(x); });
残念ながら、JavaScript には非同期メッセージを同期化する方法はない!残念!><ほんとに残念!
JavaScript 1.7 なら yield でできるんじゃないかと思いました。
投稿者 kazuho : 2006年11月30日 10:58
トラックバック
このエントリーのトラックバックURL:
https://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/942
このリストは、次のエントリーを参照しています: JavaScript で非同期処理:
» JavaScript/1.7 で協調的マルチスレッド from Kazuho@Cybozu Labs
JavaScript/1.7 の話なので Firefox 限定です。以前、 ... [続きを読む]
トラックバック時刻: 2007年05月25日 13:51
コメント
これ動かないですよ
投稿者 通りすがり : 2006年12月04日 18:31
通りすがりさん、指摘ありがとうございます。
IE だと動かなかった (setTimeout の第3引数はサポートされないらしい) ので、修正しました。
投稿者 kazuho : 2006年12月04日 21:03