♾️

【Flutter】ループで非同期処理を行う

2021/06/18に公開

for

Future<void> loadItems(List<String> ids) async {
    final items = <Item>[];
    for (final id in ids) {
          final item = await _itemRepository.findById(id);
          items.add(item);
    }
}

Future.forEach

Future<void> loadItems(List<String> ids) async {
    final items = <Item>[];
    await Future.forEach(ids, (id) async {
       final item = await _itemRepository.findById(id);
       items.add(item);
    });
}

ちなみに以下の実装だと、意図した通りに動作しません。

うまくいかない実装

Future<void> loadItems(List<String> ids) async {
    final items = <Item>[];
    ids.forEach((id) async {
        Item item = await _itemRepository.findById(id);
        items.add(item);
    });
}

Benchmark

ベンチマークに関しては、以下の記事が参考になるかと思います(forの方が早そうです)。

Discussion