同时动态异步调用

时间:2019-10-18 21:06:41

标签: flutter dart async-await

我有一个包含代码的字符串动态列表。 我想为每个代码获取事件,然后让其进入下一个状态。

我尝试了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);
  }
}

我想做类似于Promise的事情:

Promise.all([
   // for loop here
]).then(() => {
   console.log('I did everything!');
});

1 个答案:

答案 0 :(得分:1)

使用taskList维护所需的任务,并使用Future.wait

List<Future<int>> taskList = [];
taskList.add(getRandomNumber()); 
...
Future.wait(taskList)
    .then

完整代码

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

enter image description here