Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 同步动态异步调用_Flutter_Dart_Async Await - Fatal编程技术网

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));
}