Future<T>.delayed 构造函数

Future<T>.delayed(
  1. Duration duration, [
  2. FutureOr<T> computation()?
])

创建一个在延迟后执行其计算的 Future。

在给定的 duration 时间过去后,将执行 computation,并且 Future 将使用计算的结果完成。

如果 computation 返回一个 Future,则此构造函数返回的 Future 将使用那个 Future 的值或错误完成。

如果持续时间是 0 或更少,它将在所有微任务运行后,在下一次事件循环迭代中尽快完成。

如果省略了 computation,它将被视为 computation() => null,并且 Future 将最终使用 null 值完成。在这种情况下,T 必须是可空的。

如果调用 computation 抛出异常,创建的 Future 将使用该错误完成。

有关在以后的时间创建和完成 Future 的方法(不一定是经过已知固定持续时间后),请参阅 Completer

示例

Future.delayed(const Duration(seconds: 1), () {
  print('One second has passed.'); // Prints after 1 second.
});

实现

factory Future.delayed(Duration duration, [FutureOr<T> computation()?]) {
  if (computation == null && !typeAcceptsNull<T>()) {
    throw ArgumentError.value(
        null, "computation", "The type parameter is not nullable");
  }
  _Future<T> result = _Future<T>();
  new Timer(duration, () {
    if (computation == null) {
      result._complete(null as T);
    } else {
      FutureOr<T> computationResult;
      try {
        computationResult = computation();
      } catch (e, s) {
        _completeWithErrorCallback(result, e, s);
        return;
      }
      result._complete(computationResult);
    }
  });
  return result;
}