2007年 12月 04日

Deferred による疑似マルチスレッド

Deferred をつかってマルチスレッドっぽいこともできます。

loop(10, function (n) {
	print(n);
	return wait(0.1);
});

loop(10, function (n) {
	print(String.fromCharCode(97+n));
	return wait(0.2);
});

このように書くと、0 から 9 までの数値と a から j までの文字がまざって出力されます。

例: 0 a 1 b 2 3 c 4 5 d 6 7 e 8 9 f g h i j

loop 関数は Deferred をかえすので、うえのふたつが終ったら実行する処理を書くなら、

parallel([
	loop(10, function (n) {
		print(n);
	}),
	loop(10, function (n) {
		print(String.fromCharCode(97+n));
	})
]).next(function () {
	print("End");
});

とか書けます (MochiKit Deferred でも書けるはずだけどめんどいからためしてない)。Deferred のおもしろいところは、めちゃくちゃ簡単で Greasemonkey スクリプトにコピペして使えるぐらいの長さのコードでこういうことができることだと思います。