Spec-Zone.ru › Dart 1

dart:async

Метод singleWhere

Future<T> singleWhere(bool test(T element))

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

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

Исходный код

Future<T> singleWhere(bool test(T element)) {
  _Future<T> future = new _Future<T>();
  T result = null;
  bool foundResult = false;
  StreamSubscription subscription;
  subscription = this.listen(
      (T value) {
        _runUserCode(() => true == test(value), (bool isMatch) {
          if (isMatch) {
            if (foundResult) {
              try {
                throw IterableElementError.tooMany();
              } catch (e, s) {
                _cancelAndErrorWithReplacement(subscription, future, e, s);
              }
              return;
            }
            foundResult = true;
            result = value;
          }
        }, _cancelAndErrorClosure(subscription, future));
      },
      onError: future._completeError,
      onDone: () {
        if (foundResult) {
          future._complete(result);
          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/singleWhere.html

Spec-Zone.ru

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