Конструктор фабрики Stream.fromFutures
Stream.fromFutures(Создать поток из группы будущих значений.
Поток сообщает результаты будущих значений в потоке в порядке их завершения.
Если некоторые будущие значения завершились до вызова 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