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?
Asked
Active
Viewed 5.7k times
40

martin
- 93,354
- 25
- 191
- 226
3 Answers
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
-
1So if I understand it right, using Future is the recommend way. – martin Mar 10 '13 at 20:41
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
-
5I 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