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?
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.
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
来源:https://stackoverflow.com/questions/15295834/how-to-use-setinterval-settimeout-in-dart-sdk-0-4