Spec-Zone.ru › Dart 1

dart:async

Метод firstWhere

Future firstWhere(bool test(T element), { Object defaultValue() })

Находит первый элемент этого потока, соответствующий test.

Возвращает будущее, которое заполняется первым элементом этого потока, для которого test возвращает true.

Если такой элемент не найден до завершения этого потока, и функция defaultValue предоставлена, результат вызова defaultValue становится значением будущего.

Прекращает прослушивание потока после получения первого соответствующего элемента.

Внутренне метод отменяет свою подписку после первого элемента, соответствующего предикату. Это означает, что потоки с единственной подпиской (не широковещательные) закрываются и не могут быть повторно использованы после вызова этого метода.

Если произошла ошибка, или если этот поток завершается без нахождения соответствия и без предоставленной функции defaultValue, будущее получит ошибку.

Исходный код

Future<dynamic> firstWhere(bool test(T element), {Object defaultValue()}) {
  _Future<dynamic> future = new _Future();
  StreamSubscription subscription;
  subscription = this.listen(
      (T value) {
        _runUserCode(() => test(value), (bool isMatch) {
          if (isMatch) {
            _cancelAndValue(subscription, future, value);
          }
        }, _cancelAndErrorClosure(subscription, future));
      },
      onError: future._completeError,
      onDone: () {
        if (defaultValue != null) {
          _runUserCode(defaultValue, future._complete, future._completeError);
          return;
        }
        try {
          throw IterableElementError.noElement();
        } catch (e, s) {
          _completeWithErrorCallback(future, e, s);
        }
      },
      cancelOnError: true);
  return future;
}

© 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/firstWhere.html

Spec-Zone.ru

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