forEach<T>静态方法

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

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

action可以是同步的或异步的。

按顺序使用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;
  });
}