flutter - Flutter 的 Timer.periodic 有没有办法在进入下一个周期之前等待函数返回加上固定的持续时间?
问题描述
我Timer.periodic
通常使用持续时间。这非常适合我当前的用例。
Duration fiveSecs = const Duration(seconds: 5);
new Timer.periodic(fiveSecs, checkChange);
void checkChange(Timer timer) async {
//do some network calls
}
在这种特殊情况下,我进行网络调用的时间不超过 500 毫秒,并且每 5 秒执行一次就足够了,这取决于这些调用返回的内容。
现在我想以 2 秒的频率检查新值,但是,根据需要检查的内容,网络调用可能需要几百毫秒甚至 10 秒。我可以给一个很大的余量,并为计时器使用 20 秒的频率,但在这种情况下,如果可能的话,我什至更喜欢 1 秒的频率。
那么有没有一种方法可以让计时器等待一个函数,并且仍然有一个固定的持续时间,比如 1 秒。那么它需要的最长时间是1 second + callback runtime
?或者有没有更好的方法可以实现,我愿意接受建议。谢谢你。
解决方案
void startTimer() {
_timer = Timer.periodic(Duration(seconds: 1), (Timer t) async {
print("lets wait for 5 seconds");
_timer.cancel();
await Future.delayed(Duration(seconds: 5));
print("Job is done");
print(DateTime.now());
print("Do it again");
startTimer();
});
}
推荐阅读
- javascript - 今天 angular 在 localhost 刷新后打开调试器,为什么?
- javascript - 如何在 React 中使用日期选择器?
- tsql - 如何在实体框架核心中转换外部应用
- r - 使用日期时间和数字列删除重复项
- python - 在 Python 中从两个 dna fasta 文件中创建散点图
- mongodb - MongoDB Bucket upsert 性能
- mongodb - Flutter中uri mongo_dart中的无效方案
- python - 使用 objects.all() 从数据库中检索数据不起作用
- javascript - 使用 Javascript 编写俄罗斯方块并出现参考错误?
- javascript - 执行 async forEach 循环后重新定义全局变量