Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How would I put a pause in a .forEach interation

I am attempting to put in a pause between a forEach loop for a list.

I would have thought the timeout would cause a pause for the loop but it just seems to start 3 timers all at once. (In very quick succession.)

  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');
    });
  }

Any idea how I might do this?

like image 984
Yonkee Avatar asked Oct 14 '25 14:10

Yonkee


1 Answers

Use await Future.delayed() to pause for certain duration and a simple old for(...in...){} loop, instead of forEach() to iterate the values.

If forEach() receives async functions, each iteration call will run in a separate asynchronous context which can be reasoned about similarly to parallel code execution. Meanwhile forEach it self will return immediately without waiting until any async function to complete.

How to Async/await in List.forEach() in Dart

Sample: 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');
    };
  }
like image 102
Ski Avatar answered Oct 17 '25 04:10

Ski