2011年 07月 25日

AnyEvent::setTimeout

AE::timer のインターフェイスが覚えられないなーと思うので、JS の setTimeout に似たものを書きました。

use AnyEvent::setTimeout;

setTimeout(sub {
  warn "1sec!";
}, 1000);

とか書けます。ちょっと細工をしていて、ファイルの最後に AnyEvent->condvar->recv とかおまじないを書かなくても、終了時に全てのタイマーの終了を待ちます (node.js 風にしたいけどできないのか的なことを言ってたら id:motemen:detail 先生ができそうなことを言ってくれたのでやってみた感じです)

ただ、このモジュールの管理下にあるタイマーしか終了時に待てないのがいまいち感あります……

とりあえず setTimeout さえあれば JSDeferred をそのまんま移植できるなーと思った感じなんですが、それやって意味があるのか謎なのでやめました。

まぁこういうの書いてるうちに AE::timer のインターフェイスとか覚えちゃうんですけど……