簡體   English   中英

如何在命名構造函數中使用異步?

[英]How can I use async in a named constructor?

我創建了一個類,並且想在命名構造函數中使用異步,或者要在該類之外訪問該類中的方法。 當使命名構造函數返回Future類型時,我會收到一條錯誤消息: Constructors can't have a return type

然后,我嘗試刪除Future類型,但仍然收到錯誤消息,說The modifier 'async' can't be applied to the body of a constructor

如何在命名構造函數中使用異步?

class HttpService {
  Future<void> HttpService.getAll() async {
    final response = await http.get(
      Uri.encodeFull('http://localhost:4000/'),
      headers: {'headers': 'application/json'},
    );

    if (response.statusCode == 200) {}
  }
}

我是新手,所以我可能使用錯了嗎? 接受任何指導。

構造函數不能異步。 如果發現自己想要一個異步構造函數,則可以制作一個類似於異步工廠的static異步方法。 從調用者的角度來看, 並沒有太大的區別 (並且哪些區別主要支持使用static方法)。 您還可以將所有其他構造函數(包括默認構造函數)設為私有,以強制調用者使用static方法來獲取類的實例。

也就是說,在您的情況下,您可能甚至根本不需要一門課。 您打算在HttpService上使用其他方法嗎? 您的HttpService是否維護任何內部狀態? 如果沒有,那么擁有獨立功能會更好。

您不能在構造函數中使用async 您應該為此創建一個單獨的方法。

解決方案:1(推薦)

class Foo {
  static Future<void> fetch() async { // method
    await future();
  }
}

解決方案:2

class Foo {
  Foo.named() { // named constructor
    future().then((_) {
      // future is completed do whatever you need
    });
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM