2013-03-08 16 views
9

mi sono reso conto che nella versione attuale Dart SDK 0.4.1.0_r19425 metodi come setTimeout, setInterval, clearTimeout, clearInterval non fanno parte del Window classe più e tutti hanno spostato in WorkerContext .
C'è qualche documentazione su come usarli ora? Devo creare una nuova istanza di WorkerContext ogni volta che voglio usarli?Come usare setInterval/setTimeout a Dart SDK 0.4+

risposta

15

Oltre a Timer citato da Chris, c'è un'API Future-based:

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

non v'è il supporto ancora diretta per annullare una richiamata futuro, ma questo funziona abbastanza bene:

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

Speriamo che presto ci sarà anche un Stream version of Timer.repeating.

+0

Quindi, se ho capito bene, usare Future è il modo consigliato. – martin

7

Da questo post on the group (14 febbraio 2013).

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

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

E un altro esempio (copiato partire dallo stesso posto)

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

In particolare, sono ormai parte della classe Timer nella biblioteca dart:async (piuttosto che WorkerContext, che sembra essere IndexedDB specifico) . API docs here

+3

Evito di usare il timer, a meno che non mettiate try/catch all'interno di Timer. Se viene lanciata un'eccezione all'interno di Timer e non la prendi, game over e app over. Probabilmente vorrai usare Future.delayed, che non solo cattura correttamente le eccezioni, ma ti dà anche una maniglia per sapere quando è effettivamente fatto. Anche i futures compongono meglio. –