Spec-Zone.ru › Dart 1

dart:async

Метод doWhile

Future doWhile(dynamic f())

Повторяет операцию до тех пор, пока она не вернёт false.

Операция, f, может быть синхронной или асинхронной.

Операция вызывается повторно, пока она возвращает либо значение bool true или Future<bool>, которое завершается со значением true.

Если вызов f возвращает false или Future, который завершается значением false, итерация завершается, и будущее, возвращаемое методом doWhile, завершается со значением null.

Если вызов f вызывает ошибку или возвращаемое f будущее завершается ошибкой, итерация завершается, и будущее, возвращаемое методом doWhile, завершается с той же ошибкой.

Вызовы к f могут происходить в любое время, включая сразу после вызова doWhile. Единственное ограничение — новый вызов f не произойдёт до тех пор, пока не вернётся предыдущий вызов, а если он вернул Future<bool>, — не до завершения этого будущего.

Исходный код

static Future doWhile(FutureOr<bool> f()) {
  _Future doneSignal = new _Future();
  var nextIteration;
  // Bind this callback explicitly so that each iteration isn't bound in the
  // context of all the previous iterations' callbacks.
  // This avoids, e.g., deeply nested stack traces from the stack trace
  // package.
  nextIteration = Zone.current.bindUnaryCallback((bool keepGoing) {
    while (keepGoing) {
      FutureOr<bool> result;
      try {
        result = f();
      } catch (error, stackTrace) {
        // Cannot use _completeWithErrorCallback because it completes
        // the future synchronously.
        _asyncCompleteWithErrorCallback(doneSignal, error, stackTrace);
        return;
      }
      if (result is Future<bool>) {
        result.then(nextIteration, onError: doneSignal._completeError);
        return;
      }
      keepGoing = result;
    }
    doneSignal._complete(null);
  }, runGuarded: true);
  nextIteration(true);
  return doneSignal;
}

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

Spec-Zone.ru

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