當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart Future.whenComplete用法及代碼示例


dart:async 庫中Future.whenComplete 方法的用法介紹如下。

用法:

Future<T> whenComplete(
   FutureOr<void> action(
)   
)

注冊一個在這個未來完成時要調用的函數。

action 函數在這個未來完成時被調用,無論它是使用值還是錯誤完成。

這是"finally" 塊的異步等效項。

此調用返回的未來 f 將以與此未來相同的方式完成,除非在 action 調用中或在 action 調用返回的 Future 中發生錯誤。如果對action 的調用未返回未來,則忽略其返回值。

如果對action 的調用拋出,則f 以拋出的錯誤完成。

如果對 action 的調用返回 Futuref2 ,則 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.

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 whenComplete method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。