Как бы я поставил паузу в .forEach - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь сделать паузу между циклами forEach для списка.

Я бы подумал, что тайм-аут вызовет паузу в цикле, но кажется, что он запускает сразу 3 таймера. (В очень быстрой последовательности.)

  startTimeout(int seconds) async {
    print('Timer Being called now');
    var duration = Duration(seconds: seconds);
    Timer(duration, doSomething());
  }


  startDelayedWordPrint() {
    List<String> testList = ['sfs','sdfsdf', 'sfdsf'];
    testList.forEach((value) async {
      await startTimeout(30000);
      print('Writing another word $value');
    });
  }

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 24 января 2019

Используйте await Future.delayed() для паузы на определенную длительность и цикл for вместо forEach()

Если forEach() получает асинхронные функции, каждый вызов итерации будет выполняться в отдельном асинхронном контексте, который может быть обоснованпримерно так же, как параллельное выполнение кода.Между тем forEach само возвращается сразу, не дожидаясь завершения какой-либо асинхронной функции.

Асинхронизация / ожидание в List.forEach ()

Пример: https://dartpad.dartlang.org/a57a500d4593aebe1bad0ed79376016c

main() async {
    List<String> testList = ['sfs','sdfsdf', 'sfdsf'];
    for(final value in testList) {
      await Future.delayed(Duration(seconds: 1));
      print('Writing another word $value');
    };
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...