Как использовать stream.asyncMap, но вызывать все функции отображения параллельно - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть список идентификаторов, я хочу получить объект из моего API для каждого из этих идентификаторов и вернуть их в виде потока.Это мой код:

Stream<User> getList(Iterable<String> ids) =>
    Stream.fromIterable(ids).asyncMap(loadUser);

Это работает нормально, но я хочу, чтобы мои вызовы API (в loadUser()) выполнялись параллельно.Прямо сейчас вызывается первая функция loadUser(), а вторая запускается только после завершения первого.

Конечно, я могу написать что-то вроде этого:

Stream<User> getList(Iterable<String> ids) async* =>
  yield* Stream.fromIterable(await Future.wait(ids.map(loadUser)));

, но кроме этогобудучи немного запутанным, он также не излучает каждого пользователя как можно скорее.


В общем: я хочу, чтобы все загруженные объекты излучали в правильном порядке , но загружались каккак можно скорее.

Есть ли простой способ написать это, кроме создания асинхронных замыканий, которые генерируют событие для меня?

...