34

我意识到在当前的 Dart SDK 版本 0.4.1.0_r19425 中,诸如setTimeout, setInterval,之类的方法不再是类的一部分,clearTimeout它们都移到了. 现在有没有关于如何使用它们的文档?每次我想使用它们时都需要创建一个新实例吗?clearIntervalWindowWorkerContext
WorkerContext

4

3 回答 3

63

除了 Chris 提到的 Timer 之外,还有一个基于 Future 的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 的 Stream 版本

于 2013-03-08T16:29:44.747 回答
18

您可以使用:

1) 设置间隔

_timer = new Timer.periodic(const Duration(seconds: 2), functionBack);

Where: `functionBack(Timer timer) {
  print('again');
}

2) 设置超时

_timer = Timer(Duration(seconds: 5), () => print('done'));

Where _time is type Time
于 2020-04-12T13:37:46.463 回答
13

来自小组的这篇文章(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();

具体来说,它们现在是库中Timer类的一部分dart:async(而不是WorkerContext似乎是 IndexedDb 特定的)。 API文档在这里

于 2013-03-08T14:34:31.207 回答