whenComplete 抽象方法
- FutureOr<
void> action(
注册一个在当前 Future 完成(无论成功还是失败)时被调用的函数。
当这个 Future 完成时,无论是否有值或者有错误,都会调用 action
函数。
这是异步中的 "finally" 块的等效方法。
由此调用返回的 Future f
将以与当前 Future 相同的方式完成,除非在 action
调用或在 action
返回的 Future 中发生错误。如果 action
调用没有返回一个 Future,它的返回值将被忽略。
如果 action
调用抛出异常,那么 f
将以抛出的错误结束。
如果 action
调用返回一个 Future,f2
,那么 f
的完成将被延迟到 f2
完成。如果 f2
完成(失败),这将是 f
的结果。而 f2
的值总被忽略。
此方法等价于
Future<T> whenComplete(action()) {
return this.then((v) {
var f2 = action();
if (f2 is Future) return f2.then((_) => v);
return v;
}, onError: (e) {
var f2 = action();
if (f2 is Future) return f2.then((_) { throw e; });
throw e;
});
}
示例
void main() async {
var value =
await waitTask().whenComplete(() => print('do something here'));
// Prints "do something here" after waitTask() completed.
print(value); // Prints "done"
}
Future<String> waitTask() {
Future.delayed(const Duration(seconds: 5));
return Future.value('done');
}
// Outputs: 'do some work here' after waitTask is completed.
实现
Future<T> whenComplete(FutureOr<void> action());