Flutter:合并多个 Future<T> 任务
Flutter: Combine Multiple Future<T> Tasks
我们如何合并多个 FutureTask,以便我们可以在同一响应中获得所有回调。
我们用Future<T>
喜欢
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data for duration $duration";
}
像这样调用上面的方法getData(2).then((value) => print(value));
如果我们想调用多个Future Task,那怎么办呢?
对于它,FutureGroup可以用来合并多个流
FutureGroup provides us the functionality of combining multiple
futures into one single group, which will give the callback at the end
when all future tasks work gets completed.
依赖关系:
dependencies:
async: ^2.4.1
如何实现FutureGroup?
FutureGroup futureGroup = FutureGroup();
futureGroup.add(future1);
futureGroup.add(future2);
futureGroup.add(future3);
使用:
void main() {
Future<String> future1 = getData(2);
Future<String> future2 = getData(4);
Future<String> future3 = getData(6);
FutureGroup futureGroup = FutureGroup();
futureGroup.add(future1);
futureGroup.add(future2);
futureGroup.add(future3);
futureGroup.close();
futureGroup.future.then((value) => {print(value)});
}
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data";
}
输出:
I/flutter ( 5866): [This a test data, This a test data, This a test
data] // Called after 6 seconds.
注意:所有Future Task完成后只会调用一次,这里会在6秒后运行。
要同时执行所有 futures,请使用 Future.wait
这需要一个 futures 列表和 returns 一个 futures 列表:
假设你有这些期货。
class CovidAPI {
Future<int> getCases() => Future.value(1000);
Future<int> getRecovered() => Future.value(100);
Future<int> getDeaths() => Future.value(10);
}
您可以使用 Future.wait([期货列表])
将所有期货放在一起
final api = CovidAPI();
final values = await Future.wait([
api.getCases(),
api.getRecovered(),
api.getDeaths(),
]);
print(values); // [1000, 100, 10]
当期货是独立的,它们不需要顺序执行时,这是理想的。
资料来源:https://codewithandrea.com/videos/top-dart-tips-and-tricks-for-flutter-devs/
我们如何合并多个 FutureTask,以便我们可以在同一响应中获得所有回调。
我们用Future<T>
喜欢
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data for duration $duration";
}
像这样调用上面的方法getData(2).then((value) => print(value));
如果我们想调用多个Future Task,那怎么办呢?
对于它,FutureGroup可以用来合并多个流
FutureGroup provides us the functionality of combining multiple futures into one single group, which will give the callback at the end when all future tasks work gets completed.
依赖关系:
dependencies:
async: ^2.4.1
如何实现FutureGroup?
FutureGroup futureGroup = FutureGroup();
futureGroup.add(future1);
futureGroup.add(future2);
futureGroup.add(future3);
使用:
void main() {
Future<String> future1 = getData(2);
Future<String> future2 = getData(4);
Future<String> future3 = getData(6);
FutureGroup futureGroup = FutureGroup();
futureGroup.add(future1);
futureGroup.add(future2);
futureGroup.add(future3);
futureGroup.close();
futureGroup.future.then((value) => {print(value)});
}
Future<String> getData(int duration) async {
await Future.delayed(Duration(seconds: duration)); //Mock delay
return "This a test data";
}
输出:
I/flutter ( 5866): [This a test data, This a test data, This a test data] // Called after 6 seconds.
注意:所有Future Task完成后只会调用一次,这里会在6秒后运行。
要同时执行所有 futures,请使用 Future.wait
这需要一个 futures 列表和 returns 一个 futures 列表:
假设你有这些期货。
class CovidAPI {
Future<int> getCases() => Future.value(1000);
Future<int> getRecovered() => Future.value(100);
Future<int> getDeaths() => Future.value(10);
}
您可以使用 Future.wait([期货列表])
将所有期货放在一起final api = CovidAPI();
final values = await Future.wait([
api.getCases(),
api.getRecovered(),
api.getDeaths(),
]);
print(values); // [1000, 100, 10]
当期货是独立的,它们不需要顺序执行时,这是理想的。 资料来源:https://codewithandrea.com/videos/top-dart-tips-and-tricks-for-flutter-devs/