[英]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.