loops - 我将如何暂停 .forEach 交互
问题描述
我试图在列表的 forEach 循环之间暂停。
我原以为超时会导致循环暂停,但它似乎一次启动了 3 个计时器。(非常快速地接连出现。)
startTimeout(int seconds) async {
print('Timer Being called now');
var duration = Duration(seconds: seconds);
Timer(duration, doSomething());
}
startDelayedWordPrint() {
List<String> testList = ['sfs','sdfsdf', 'sfdsf'];
testList.forEach((value) async {
await startTimeout(30000);
print('Writing another word $value');
});
}
知道我该怎么做吗?
解决方案
用于await Future.delayed()
暂停一段时间和一个 for 循环,而不是forEach()
如果forEach()
接收到异步函数,则每个迭代调用都将在单独的异步上下文中运行,这与并行代码执行类似。同时 forEach 它自己将立即返回,而无需等待任何异步函数完成。
示例: https ://dartpad.dartlang.org/a57a500d4593aebe1bad0ed79376016c
main() async {
List<String> testList = ['sfs','sdfsdf', 'sfdsf'];
for(final value in testList) {
await Future.delayed(Duration(seconds: 1));
print('Writing another word $value');
};
}
推荐阅读
- android - 我无法将数据插入我的 SQLiteDatabase
- scilab - 在 Scilab 中加载代码生成器工具箱时出错
- java - 如何在 java 中启用 AWS-SNS 原始消息传递
- amazon-web-services - 对 DynamoDB 结果集进行分页和排序的选项?
- python - numpy 多维数组中向量的第一个非零值
- sql-server - 删除重复的明细交易(标头明细存储过程)
- php - 在 laravel 中找不到 faker 数据库的基表或视图
- java - LocalTime 军用时间解析 00:00
- php - 如何仅隐藏 wordpress 空子类别?
- asp.net-core - 在 Application Insights for .Net Core 中拦截方法调用