web-dev-qa-db-ja.com

Dart SDK0.4以降でsetInterval / setTimeoutを使用する方法

現在のDartSDKバージョン0.4.1.0_r19425では、setTimeoutsetIntervalclearTimeoutclearIntervalなどのメソッドは の一部ではないことに気付きました。 Window クラスはもうあり、それらはすべて WorkerContext に移動しました。
今それらを使用する方法についてのドキュメントはありますか?使用するたびにWorkerContextの新しいインスタンスを作成する必要がありますか?

18
martin

クリスが言及したタイマーに加えて、 将来ベース APIがあります:

var future = new Future.delayed(const Duration(milliseconds: 10), doStuffCallback);

Futureコールバックをキャンセルするための直接的なサポートはまだありませんが、これはかなりうまく機能します。

var future = new Future.delayed(const Duration(milliseconds: 10));
var subscription = future.asStream().listen(doStuffCallback);
// ...
subscription.cancel();

うまくいけば、すぐに Timer.repeatingのストリームバージョン もあります。

34
Sean Eagan

これから グループへの投稿 (2013年2月14日)。

// Old Version
window.setTimeout(() { doStuff(); }, 0);

// New Version
import 'Dart:async';
Timer.run(doStuffCallback);

そして別の例(同じ投稿からコピー)

// Old version: 
var id = window.setTimeout(doStuffCallback, 10);
.... some time later....
window.clearTimeout(id);

id = window.setInterval(doStuffCallback, 1000);
window.clearInterval(id);

// New version:
var timer = new Timer(const Duration(milliseconds: 10), doStuffCallback);
... some time later ---
timer.cancel();

timer = new Timer.repeating(const Duration(seconds: 1), doStuffCallback);
timer.cancel();

具体的には、これらはDart:asyncライブラリのTimerクラスの一部になりました(IndexedDb固有のように見えるWorkerContextではありません)。 APIドキュメントはこちら

9
Chris Buckett