You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart逐字符打印函数多次调用异常:Future.delayed问题求助

问题原因

你的代码里,forEach会一次性创建所有延迟任务,每个任务的触发时间是index*50ms。多次调用printFancy时,不同调用的延迟任务会并行执行,导致多个字符串的字符交叉输出;同时stdout.write("\n")会在所有延迟任务执行前就运行,造成换行提前出现。

解决方案

改用async/await让字符输出串行执行,确保每个字符输出后再等待延迟,最后统一换行。这样多次调用时,前一个字符串的所有字符输出完成后才会处理下一个。

修改后的代码:

import 'dart:io';

Future<void> printFancy(String data) async {
  for (final char in data.split('')) {
    stdout.write(char);
    await Future.delayed(const Duration(milliseconds: 50));
  }
  stdout.write('\n');
}

// 调用示例
void main() async {
  await printFancy('Hello World');
  await printFancy('I am a Dart beginner');
}
关键改动说明
  • 将函数改为async函数并返回Future<void>,支持await操作
  • 用普通for循环替代asMap().forEach,允许在循环内部使用await实现串行延迟
  • 把换行操作移到所有字符输出完成后,避免提前换行
  • 调用函数时使用await,确保多个printFancy调用按顺序执行

内容的提问来源于stack exchange,提问作者The AM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:07:10