在Dart中,我如何执行类似于setTimeout + clearTimeout的操作?

41

我正在将一些JavaScript代码移植到Dart。 我有一个使用window.setTimeout在一段时间后运行回调的代码。 在某些情况下,通过window.clearTimeout取消该回调。

在Dart中相当于什么呢?我可以使用new Future.delayed来替换setTimeout,但是我找不到取消此操作的方法。 也没有找到一种从Dart调用clearTimeout的方式。

2个回答

83
您可以使用计时器类
import 'dart:async';

var timer = Timer(Duration(seconds: 1), () => print('done'));

timer.cancel();

好的,我会试一下。 Timer只是一个围绕着Future 的包装器,当被取消时内部设置一个bool吗? - Danny Tuppeny
2
据我所知,情况并非如此。Future.delayed使用了一个Timer,但除此之外,我认为它们没有关联(不过我不确定)。 - Günter Zöchbauer
2
使用Time来执行可取消的任务。Future.delayed在后台使用Timer,而不是相反。您可以在此处查看其实现:https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/sdk/lib/async/future.dart#224 - Matt B
Dart源代码现在可以在GitHub上获取。Future.delayed工厂的链接在这里:https://github.com/dart-lang/sdk/blob/master/sdk/lib/async/future.dart - Vince Varga

2

如果您想模仿JavaScript API:

import 'dart:async';

Timer setTimeout(callback, [int duration = 1000]) {
  return Timer(Duration(milliseconds: duration), callback);
}

void clearTimeout(Timer t) {
  t.cancel();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接