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 スクリプトにコピペして使えるぐらいの長さのコードでこういうことができることだと思います。