Dart并行异步操作方法



我有几个GET请求要从flutter发送到API,我希望尽可能高效地运行这个请求。我仍在学习Flutter,来自JS背景,我使用了类似于Javascript中Promise.all([ ... ])的模式,但我觉得这是一个破解而不是解决方案。

如果有更好的方法,我期待着阅读它:

final apiProvider = new ApiProvider();
final apiData = await Future.wait([
apiProvider.getProducts(),   // Returns Future<List<Product>>
apiProvider.getCategories(), // Returns Future<List<Category>>
apiProvider.getBrands(),     // Returns Future<List<Brand>>
apiProvider.getCustomers(),  // Returns Future<List<Customer>>
]);
List<Product> products    = apiData[0];
List<Category> categories = apiData[1];
List<Brand> brands        = apiData[2];
List<Customer> customers  = apiData[3];

使用Future.wait是合适的。我个人会await一个直接设置变量的Future<void>列表,这样可以避免以后使用索引(从而避免潜在的错误(,还可以提高类型安全性:

final apiProvider = ApiProvider();
List<Product> products;
List<Category> categories;
List<Brand> brands;
List<Customer> customers;
await Future.wait([
Future<void>(() async => products = await apiProvider.getProducts()),
Future<void>(() async => categories = await apiProvider.getCategories()),
Future<void>(() async => brands = await apiProvider.getBrands()),
Future<void>(() async => customers = await apiProvider.getCustomers()),
]);

最新更新