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