40

I realised that in current Dart SDK version 0.4.1.0_r19425 methods like setTimeout, setInterval, clearTimeout, clearInterval aren't part of Window class any more and they all moved to WorkerContext.
Is there any documentation on how to use them now? Do I need to create a new instance of WorkerContext every time I want to use them?

martin
  • 93,354
  • 25
  • 191
  • 226

3 Answers3

74

In addition to Timer mentioned by Chris, there is a Future-based API:

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

There is not yet direct support for cancelling a Future callback, but this works pretty well:

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

Hopefully, there will soon be a Stream version of Timer.repeating as well.

Sean Eagan
  • 1,130
  • 7
  • 9
28

You can use:

1) SetInterval

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

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

2) SetTimeOut

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

Where _time is type Time
Azametzin
  • 5,223
  • 12
  • 28
  • 46
Cristhian D
  • 572
  • 6
  • 5
14

From this post on the group (Feb 14th 2013).

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

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

And another example (copied from the same post)

// 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();

Specifically, they are now part of the Timer class in the dart:async library (rather than WorkerContext, which seems to be IndexedDb specific). API docs here

Alexandre Ardhuin
  • 71,959
  • 15
  • 151
  • 132
Chris Buckett
  • 13,738
  • 5
  • 39
  • 46
  • 5
    I caution against using timer, unless you put try/catch inside Timer. If an exception is thrown inside Timer, and you don't catch it, game over and app over. You probably want to use Future.delayed, which not only catches exceptions correctly, but also gives you a handle to know when it's actually done. Futures compose better, too. – Seth Ladd Mar 10 '13 at 16:13