РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
501 of 723 menu

Метод asyncExpand

Метод asyncExpand принимает функцию-преобразователь, которая для каждого элемента исходного потока возвращает новый поток. Метод подписывается на эти новые потоки по очереди и передает их элементы в результирующий поток. В отличие от метода expand, функция-преобразователь здесь может быть асинхронной, то есть возвращать Future или Stream.

Первым параметром мы передаем функцию, которая принимает элемент исходного потока и возвращает новый поток. Второй необязательный параметр позволяет указать поведение при ошибках. Важно отметить, что потоки, возвращаемые функцией, обрабатываются последовательно: следующий поток начнет испускаться только после завершения предыдущего.

Синтаксис

Stream<T> asyncExpand<T>(Stream<T> Function(S) convert)

Пример

Давайте преобразуем каждый элемент исходного потока в новый поток из двух элементов и соберем результат в список:

Stream<int> createStream(int value) { return Stream.fromIterable([value, value * 10]); } void main() async { Stream<int> stream = Stream.fromIterable([1, 2, 3]); List<int> res = await stream .asyncExpand((value) => createStream(value)) .toList(); print(res); }

Результат выполнения кода:

[1, 10, 2, 20, 3, 30]

Пример

Давайте используем асинхронную функцию, которая возвращает Future с новым потоком, чтобы продемонстрировать асинхронную природу метода:

Future<Stream<String>> getWords(String prefix) async { return Stream.fromIterable(['$prefix-a', '$prefix-b']); } void main() async { Stream<String> stream = Stream.fromIterable(['x', 'y']); List<String> res = await stream .asyncExpand((value) => getWords(value)) .toList(); print(res); }

Результат выполнения кода:

["x-a", "x-b", "y-a", "y-b"]

Смотрите также

  • метод expand,
    который синхронно преобразует элементы
  • метод asyncMap,
    который асинхронно преобразует элементы
  • метод map,
    который преобразует элементы потока
  • класс Stream,
    который представляет поток данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить