# forEach<T> method

Future forEach <T>(Iterable<T> elements, FutureOr action(T element))

Performs an action for each element of the iterable, in turn.

The `action` may be either synchronous or asynchronous.

Calls `action` with each element in `elements` in order. If the call to `action` returns a `Future<T>`, the iteration waits until the future is completed before continuing with the next element.

Returns a Future that completes with `null` when all elements have been processed.

Non-Future return values, and completion-values of returned Futures, are discarded.

Any error from `action`, synchronous or asynchronous, will stop the iteration and be reported in the returned Future.

## Implementation

    static Future forEach<T>(Iterable<T> elements, FutureOr action(T element)) {
      var iterator = elements.iterator;
      return doWhile(() {
        if (!iterator.moveNext()) return false;
        var result = action(iterator.current);
        if (result is Future) return result.then(_kTrue);
        return true;
      });
    }