將回撥轉換為期貨

Dart 有一個強大的非同步庫,包括 FutureStream 等。但是,有時你可能遇到使用回撥而不是 Futures 的非同步 API。為了彌補回撥和期貨之間的差距,Dart 提供了 Completer 類。你可以使用 Completer 將回撥轉換為 Future。

完成程式非常適合使用基於 Future 的 API 橋接基於回撥的 API。例如,假設你的資料庫驅動程式不使用 Futures,但你需要返回 Future。試試這段程式碼:

  // A good use of a Completer.

  Future doStuff() {
    Completer completer = new Completer();
    runDatabaseQuery(sql, (results) {
      completer.complete(results);
    });
    return completer.future;
  }

如果你使用的 API 已經返回 Future,則無需使用 Completer。