forEach<T> 静态方法

Future<void> forEach<T>(
  1. Iterable<T> elements,
  2. FutureOr action(
    1. T element
    )
)

对于可迭代的每个元素执行一个动作,依次进行。

动作可以是同步的或异步的。

按顺序调用 elements 中每个元素的 action。如果调用 action 返回一个 Future<T>,则迭代将等待该 future 完成,然后再继续下一个元素。

返回一个 Future,当所有元素都已处理完毕时以 null 完成。

Future 返回值,以及返回的 Future 的完成值将被丢弃。

来自 action 的任何错误,无论是同步还是异步,都将停止迭代,并在返回的 Future 中报告。

实现

static Future<void> 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;
  });
}