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());