我如何在.forEach互动中暂停一下

时间:2019-01-24 05:58:50

标签: loops dart flutter

我正试图在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 :(得分:2)

使用await Future.delayed()暂停一定的时间并进行for循环,而不是forEach()

如果forEach()接收异步函数,则每个迭代调用将在单独的异步上下文中运行,其推理原理类似于并行代码执行。同时forEach它自己将立即返回,而无需等待任何异步功能完成。

Async/await in 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');
    };
  }