Spec-Zone.ru › Dart 2

dart:async

Метод fold<S>

Future<S> fold<S>(
  1. S initialValue,
  2. S combine(
    1. S previous,
    2. T element
    )
)

Объединяет последовательность значений, многократно применяя combine.

Подобно Iterable.fold, эта функция хранит значение, начиная с initialValue и обновляя его для каждого элемента этого потока. Для каждого элемента значение обновляется до результата вызова combine с предыдущим значением и элементом.

Когда этот поток завершается, возвращённый future завершается текущим значением. Для пустого потока future завершается с initialValue.

Если этот поток выдаёт ошибку или вызов combine выбрасывает исключение, возвращённый future завершается с этой ошибкой, и обработка останавливается.

Пример:

final result = await Stream.fromIterable([2, 6, 10, 8, 2])
    .fold<int>(10, (previous, element) => previous + element);
print(result); // 38

Реализация

Future<S> fold<S>(S initialValue, S combine(S previous, T element)) {
  _Future<S> result = new _Future<S>();
  S value = initialValue;
  StreamSubscription<T> subscription =
      this.listen(null, onError: result._completeError, onDone: () {
    result._complete(value);
  }, cancelOnError: true);
  subscription.onData((T element) {
    _runUserCode(() => combine(value, element), (S newValue) {
      value = newValue;
    }, _cancelAndErrorClosure(subscription, result));
  });
  return result;
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Stream/fold.html

Spec-Zone.ru

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