Spec-Zone.ru › Dart 1

dart:async

Метод asyncExpand

Stream<E> asyncExpand<E>(Stream<E> convert(T event))

Создает новый поток с событиями потока на каждый исходный элемент.

Это работает как expand, за исключением того, что convert возвращает Stream вместо Iterable. События возвращаемого потока становятся событиями возвращаемого потока в порядке их генерации.

Если convert возвращает null, никакое значение не помещается в выходной поток, так же, как если бы оно вернуло пустой поток.

Возвращаемый поток является потоком широковещательной передачи, если это поток.

Исходный код

Stream<E> asyncExpand<E>(Stream<E> convert(T event)) {
  StreamController<E> controller;
  StreamSubscription<T> subscription;
  void onListen() {
    assert(controller is _StreamController ||
        controller is _BroadcastStreamController);
    final _EventSink<E> eventSink = controller as Object/*=_EventSink<E>*/;
    subscription = this.listen((T event) {
      Stream<E> newStream;
      try {
        newStream = convert(event);
      } catch (e, s) {
        controller.addError(e, s);
        return;
      }
      if (newStream != null) {
        subscription.pause();
        controller.addStream(newStream).whenComplete(subscription.resume);
      }
    },
        onError: eventSink._addError, // Avoid Zone error replacement.
        onDone: controller.close);
  }

  if (this.isBroadcast) {
    controller = new StreamController<E>.broadcast(
        onListen: onListen,
        onCancel: () {
          subscription.cancel();
        },
        sync: true);
  } else {
    controller = new StreamController<E>(
        onListen: onListen,
        onPause: () {
          subscription.pause();
        },
        onResume: () {
          subscription.resume();
        },
        onCancel: () => subscription.cancel(),
        sync: true);
  }
  return controller.stream;
}

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/Stream/asyncExpand.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API