Ich erkannte, dass in der aktuellen Dart SDK Version 0.4.1.0_r19425 Methoden wie setTimeout
, setInterval
, clearTimeout
, clearInterval
sind nicht Teil der Window
Klasse mehr und sie alle bewegt WorkerContext
verwenden .
Gibt es Dokumentation, wie man sie jetzt benutzt? Muss ich jedes Mal eine neue Instanz von WorkerContext
erstellen, wenn ich sie verwenden möchte?Wie setInterval/SetTimeout in Dart SDK 0.4+
Antwort
Neben Timer von Chris erwähnt, gibt es eine Future-based API:
var future = new Future.delayed(const Duration(milliseconds: 10), doStuffCallback);
Es ist noch nicht die direkte Unterstützung für eine Zukunft Rückruf Cancelling, aber das funktioniert ziemlich gut:
var future = new Future.delayed(const Duration(milliseconds: 10));
var subscription = future.asStream().listen(doStuffCallback);
// ...
subscription.cancel();
Hoffentlich gibt es bald auch eine Stream version of Timer.repeating.
Von diesem post on the group (14. Februar 2013).
// Old Version
window.setTimeout(() { doStuff(); }, 0);
// New Version
import 'dart:async';
Timer.run(doStuffCallback);
Und ein weiteres Beispiel (aus dem gleichen Post kopiert)
// 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();
Insbesondere sind sie nun Teil der Timer
Klasse in der dart:async
Bibliothek (statt WorkerContext
, die IndexedDB spezifisch zu sein scheint) . API docs here
Ich warne vor der Verwendung von Timer, es sei denn, Sie setzen try/catch in Timer. Wenn eine Ausnahme innerhalb des Timers ausgelöst wird und Sie sie nicht abfangen, wird das Spiel beendet und die App wird beendet. Sie möchten wahrscheinlich Future.delayed verwenden, das nicht nur Ausnahmen korrekt abfängt, sondern Ihnen auch einen Überblick gibt, wann es tatsächlich fertig ist. Futures komponieren auch besser. –
Also, wenn ich es richtig verstehe, ist die Verwendung von Future der empfohlene Weg. – martin