Async/await in List.forEach()

前端 未结 4 559
执笔经年
执笔经年 2020-12-15 15:10

I\'m writting some kind of bot (command line application) and I\'m having trouble with async execution when I\'m using \"forEach\" method. Here is a simplified code of what

相关标签:
4条回答
  • 2020-12-15 15:36

    I know this is an old question, but I'll leave here a new answer, hoping this help someone in the future.

    You can use forEach for what you're trying to achieve by doing something like this:

      asyncOne() async {
      print("asyncOne start");
      await Future.forEach([1, 2, 3],(num) async {
        await asyncTwo(num);
      });
      print("asyncOne end");
    }
    
    0 讨论(0)
  • 2020-12-15 15:45

    You need to use Future.forEach.

    main() async {
      print("main start");
      await asyncOne();
      print("main end");
    }
    
    asyncOne() async {
      print("asyncOne start");
      await Future.forEach([1, 2, 3], (num) async {
        await asyncTwo(num);
      });
      print("asyncOne end");
    }
    
    asyncTwo(num) async
    {
      print("asyncTwo #${num}");
    }
    
    0 讨论(0)
  • 2020-12-15 15:48

    You can't use forEach for this because it doesn't actually look at the return values of its callbacks. If they are futures, they will just be lost and not awaited.

    You can either do a loop like Steven Upton suggested, or you can use Future.wait if you want the operations to run simultaneously, not one after the other:

    asyncOne() async {
      print("asyncOne start");
      await Future.wait([1, 2, 3].map(asyncTwo));
      print("asyncOne end");
    }
    
    0 讨论(0)
  • 2020-12-15 15:52

    I don't think it's possible to achieve what you want with the forEach method. However it will work with a for loop. Example;

    asyncOne() async {
      print("asyncOne start");
      for (num number in [1, 2, 3])
        await asyncTwo(number);
      print("asyncOne end");
    }
    
    0 讨论(0)
提交回复
热议问题