I'm using Future.wait() to get some data like in the code below:
I call the function Future.delayed() to wait 1 second between every call because I have a limit set to 1 request per second

    await Future.wait([

        Future.delayed(const Duration(milliseconds: 1000))
            .then((value) => getPartNumber(1)
            .then((value) => addPartToList((value.data)))),

        Future.delayed(const Duration(milliseconds: 2000))
            .then((value) => getPartNumber(2)
            .then((value) => addPartToList((value.data)))),

        Future.delayed(const Duration(milliseconds: 3000))
            .then((value) => getPartNumber(3)
            .then((value) => addPartToList((value.data)))),

        Future.delayed(const Duration(milliseconds: 4000))
            .then((value) => getPartNumber(4)
            .then((value) => addPartToList((value.data)))),

    ]);

所以我想做的是使用循环,而不是手动重复调用4次

推荐答案

为什么不能使用f或循环,并在循环之间等待1秒,以不超过速率限制.

f或(int i = 1; i <= 4; i++){
  await Future.delayed(const Duration(seconds: 1));
  await getPartNumber(i).then((value) => addPartToList(value.data));
}

这还可以确保在等待中间的时间时,每秒传入的请求不会超过一个.

await f或(var i in Stream.periodic(const Duration(seconds: 1), (i)=>i).take(5)){
  if(i == 0) continue;
  await getPartNumber(i).then((value) => addPartToList(value.data));
}

或者如果你真的想用future go 做.我个人不喜欢wait(),下面是方法:

await Future.wait(
  Iterable.generate(4, (i)=>Future.delayed(const Duration(seconds: i + 1))
    .then((value) => getPartNumber(i + 1))
    .then((value) => addPartToList(value.data))
);

await Future.wait([
  f或(int i = 1; i <= 4; i++)
    Future.delayed(const Duration(seconds: i))
      .then((value) => getPartNumber(i)
      .then((value) => addPartToList(value.data))
]);

Flutter相关问答推荐

创建后检索FiRestore文档ID

Flutter版本3.19.2需要更新版本的Kotlin Gradle插件./android/build.gradle:ext.kotlin_version = latest-version>'

如何在扩展其他小部件时访问Ref

当键盘在抖动中打开时,如何才能看到包装在SingleChildScrollView中的列中的最后一个小工具?

将侧边菜单和底部导航栏放在同一Flutter 应用程序中

为什么FloatingActionButton未显示

使用 forLoops 在 Dart 中进行单元测试会返回 stackoverflow

在Flutter中为容器实现线性渐变背景动画

Flutter: pie_chart 插件动画滚动问题

Flutter ImagePicker - 在 onPressed 中异步获取图像显示 lint 警告

如何停止折线图的抖动

Flutter Dart 功能弹出错误的小部件?

状况不佳 - Cubit

为什么 orientation == Orientation.portrait 总是正确的,尽管我的设备已经处于横向

如何将变量翻译成其他语言

如何在 Flutter 中的页面加载上的 Listview 上应用自动滚动

为什么这个参数类型不能分配给参数类型?

在另一个页面编辑数据后更新 Flutter 页面的惯用方法?

如何在Flutter 中专注于列表视图中最新添加的项目

Flutter Firebase 可以在真实设备上运行,而不是在 Android 模拟器上运行