Future<T>.delayed 构造函数
创建一个在延迟后执行其计算的 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;
}