Flutter 同步动态异步调用
我有一个包含代码的字符串动态列表。 我想为每个代码获取事件,然后让位于下一个状态 我已经尝试了Flutter 同步动态异步调用,flutter,dart,async-await,Flutter,Dart,Async Await,我有一个包含代码的字符串动态列表。 我想为每个代码获取事件,然后让位于下一个状态 我已经尝试了Future.wait(),但由于它是动态的,所以我无法传递异步调用列表 这是我目前的代码: var packagesData = List<BuiltList<Event>>(); for (var packageNumber in packages) { final packageEvents = await serviceDataSource.fetchPackageE
Future.wait()
,但由于它是动态的,所以我无法传递异步调用列表
这是我目前的代码:
var packagesData = List<BuiltList<Event>>();
for (var packageNumber in packages) {
final packageEvents = await serviceDataSource.fetchPackageEvents(packageNumber);
packagesData.add(packageEvents);
if (packagesData.length == packages.length) {
return persistAllPackagesData(packagesData);
}
}
使用任务列表维护所需任务并使用Future.wait
List<Future<int>> taskList = [];
taskList.add(getRandomNumber());
...
Future.wait(taskList)
.then
List taskList=[];
taskList.add(getRandomNumber());
...
Future.wait(任务列表)
.那么
完整代码
import 'dart:async';
import 'dart:math';
Future<int> getRandomNumber() async {
var random = new Random();
return random.nextInt(100);
}
void findSmallestNumberInList(List<int> lst) {
print("all numbers are in:");
lst.forEach((l) => print(l));
lst.sort();
int largest = lst.first;
print("The smallest random # we generated was: ${largest}");
}
void main() async {
List<Future<int>> taskList = [];
taskList.add(getRandomNumber());
taskList.add(getRandomNumber());
taskList.add(getRandomNumber());
Future.wait(taskList)
.then((List<int> results) => findSmallestNumberInList(results));
Future.wait([getRandomNumber(), getRandomNumber(), getRandomNumber()])
.then((List<int> results) => findSmallestNumberInList(results));
}
导入'dart:async';
导入“dart:math”;
Future getRandomNumber()异步{
var random=新的random();
返回random.nextInt(100);
}
无效FindSalestNumberInList(列表lst){
打印(“所有数字都在:”);
第一个forEach((l)=>打印(l));
lst.sort();
int最大=第一个;
print(“我们生成的最小随机数为:${max}”);
}
void main()异步{
列表任务列表=[];
taskList.add(getRandomNumber());
taskList.add(getRandomNumber());
taskList.add(getRandomNumber());
Future.wait(任务列表)
。然后((列出结果)=>FindSalestNumberInList(结果));
Future.wait([getRandomNumber(),getRandomNumber(),getRandomNumber()]))
。然后((列出结果)=>FindSalestNumberInList(结果));
}
我不明白为什么
未来。等等对你不起作用,你能澄清一下吗?另一条评论,关于承诺。所有你在这里放置for循环的地方,你不能在那里设置for循环,承诺。所有人都会自动为你做循环。也许如果你告诉我你对未来做了什么。等等,我可以帮你更好。你能发布你提供的代码的整个方法吗?还有persistAllPackagesData()的实现?@pablobarera我的persistAllPackagesData函数只在本地保存数据。你得到的错误是什么?很好的方法,但他这样做的方式也应该有效,对吗?我认为他只是在persistAllPackagesData()内部做错了什么。如果没有persistAllPackagesData()的细节,这并不容易。我所能做的就是提供可能的解决方案。谢谢。我的PersistAllPackageData()只在本地保存数据并返回。我尝试了您的方法,但当我将该函数添加到aux列表时,该函数正在被调用。
import 'dart:async';
import 'dart:math';
Future<int> getRandomNumber() async {
var random = new Random();
return random.nextInt(100);
}
void findSmallestNumberInList(List<int> lst) {
print("all numbers are in:");
lst.forEach((l) => print(l));
lst.sort();
int largest = lst.first;
print("The smallest random # we generated was: ${largest}");
}
void main() async {
List<Future<int>> taskList = [];
taskList.add(getRandomNumber());
taskList.add(getRandomNumber());
taskList.add(getRandomNumber());
Future.wait(taskList)
.then((List<int> results) => findSmallestNumberInList(results));
Future.wait([getRandomNumber(), getRandomNumber(), getRandomNumber()])
.then((List<int> results) => findSmallestNumberInList(results));
}