如何运行重现的功能,飞镖?(How do I run a reoccurring function,

2019-07-20 02:45发布

我想了个遍运行功能,在之间的延迟。 我怎样才能用飞镖做到这一点?

Answer 1:

您可以使用Timer类调度一次性和重复功能。

重复

这里是你如何运行重复功能:

import 'dart:async';
main() {
  const oneSec = const Duration(seconds:1);
  new Timer.periodic(oneSec, (Timer t) => print('hi!'));
}

定时器有两个参数,一个持续时间和运行功能。 持续时间必须是一个实例Duration 。 回调必须采用一个参数,定时器本身。

取消重复计时器

使用timer.cancel()来取消重复的计时器。 这是一个原因,为什么定时器传递给回调运行,从重复的计时器。

延迟一段时间后单次

要延迟一段时间后安排一拍功能(执行一次,在未来的一段时间):

import 'dart:async';
main() {
  const twentyMillis = const Duration(milliseconds:20);
  new Timer(twentyMillis, () => print('hi!'));
}

请注意,对于单次计时器不带参数的回调。

一次性尽快

您也可以请求函数尽快运行,在未来的至少一个事件循环打勾。

import 'dart:async';
main() {
  Timer.run(() => print('hi!'));
}

在HTML

定时器甚至在HTML工作。 事实上, window.setTimeout被删除,所以计时器是运行在未来功能的唯一途径。



Answer 2:

https://api.dartlang.org/stable/1.24.3/dart-async/Stream/Stream.periodic.html

import 'dart:async';

StreamSubscription periodicSub;

void main() {
  periodicSub = new Stream.periodic(const Duration(milliseconds: 500), (v) => v)
      .take(10)
      .listen((count) => print('tick $count'));
}

或者,如果不只是需要计数器

import 'dart:async';

StreamSubscription periodicSub;

void main() {
  periodicSub = new Stream.periodic(const Duration(milliseconds: 500))
      .take(10)
      .listen((_) => print('tick'));
}


Answer 3:

您还可以使用Future.delayed并等待延迟执行:

Future<Null> delay(int milliseconds) {
  return new Future.delayed(new Duration(milliseconds: milliseconds));
}


main() async {
  await delay(500);
  print('Delayed 500 milliseconds');
}


Answer 4:

替代;

Timer interval(Duration duration, func) {
  Timer function() {
    Timer timer = new Timer(duration, function);

    func(timer);

    return timer;
  }

  return new Timer(duration, function);
}

int i = 0;

interval(new Duration(seconds: 1), (timer) {
  print(i++);

  if (i > 5) timer.cancel();
});


文章来源: How do I run a reoccurring function, in Dart?
标签: dart