Я хотел бы запускать функцию снова и снова, с задержкой между ними. Как я могу сделать это с помощью Dart?
Как запустить функцию reoccurring в Dart?
Ответ 1
Вы можете использовать класс Timer
для планирования однократных и повторяющихся функций.
Повторяя
Вот как вы запускаете повторяющуюся функцию:
import 'dart:async';
main() {
const oneSec = const Duration(seconds:1);
new Timer.periodic(oneSec, (Timer t) => print('hi!'));
}
Таймер принимает два аргумента, продолжительность и функцию для запуска. Продолжительность должна быть экземпляром Duration
. Обратный вызов должен принимать один параметр, сам таймер.
Отмена повторного таймера
Используйте timer.cancel()
для отмены повторного таймера. Это одна из причин, по которой таймер передается на вызов обратного вызова из повторяющегося таймера.
Один выстрел после задержки
Чтобы запланировать однократную функцию после задержки (выполнить один раз, некоторое время в будущем):
import 'dart:async';
main() {
const twentyMillis = const Duration(milliseconds:20);
new Timer(twentyMillis, () => print('hi!'));
}
Обратите внимание, что обратный вызов для таймера с одним выстрелом не принимает параметр.
Один выстрел как можно скорее
Вы также можете запросить, чтобы функция запускалась как можно скорее, по крайней мере, один цикл цикла событий в будущем.
import 'dart:async';
main() {
Timer.run(() => print('hi!'));
}
В HTML
Таймеры даже работают в HTML. Фактически, window.setTimeout
был удален, поэтому Timer - единственный способ запустить функцию в будущем.
Ответ 2
Вы также можете использовать Future.delayed и ждать задержки выполнения:
Future<Null> delay(int milliseconds) {
return new Future.delayed(new Duration(milliseconds: milliseconds));
}
main() async {
await delay(500);
print('Delayed 500 milliseconds');
}