Spec-Zone.ru › Dart 1

dart:async

Конструктор фабрики Stream.fromFutures

Stream.fromFutures(Iterable<Future<T>> futures)

Создать поток из группы будущих значений.

Поток сообщает результаты будущих значений в потоке в порядке их завершения.

Если некоторые будущие значения завершились до вызова Stream.fromFutures, их результат будет выведен в созданный поток в произвольном порядке.

Когда все будущие значения завершатся, поток закрывается.

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

Исходный код

factory Stream.fromFutures(Iterable<Future<T>> futures) {
  _StreamController<T> controller = new StreamController<T>(sync: true);
  int count = 0;
  var onValue = (T value) {
    if (!controller.isClosed) {
      controller._add(value);
      if (--count == 0) controller._closeUnchecked();
    }
  };
  var onError = (error, stack) {
    if (!controller.isClosed) {
      controller._addError(error, stack);
      if (--count == 0) controller._closeUnchecked();
    }
  };
  // The futures are already running, so start listening to them immediately
  // (instead of waiting for the stream to be listened on).
  // If we wait, we might not catch errors in the futures in time.
  for (var future in futures) {
    count++;
    future.then(onValue, onError: onError);
  }
  // Use schedule microtask since controller is sync.
  if (count == 0) scheduleMicrotask(controller.close);
  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/Stream.fromFutures.html

Spec-Zone.ru

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