我正在制作Flutter应用,我需要每5秒定期调用一个功能。这是我当前的实现:
Timer.periodic(markerRefreshInterval, (Timer t) {
print('$markerRefreshInterval seconds over, refreshing...');
_fetchMarkersFromDb(); // updates markers every 5 seconds
});
但是,有时(由于网络问题等),_fetchMarkersFromDb()
功能的执行时间超过5秒。在这种情况下,我发现(借助控制台中的调试打印)并行执行同一功能的多个实例(线程?)。这弄乱了我要在每个函数调用中递增的变量。]>
我希望以至少5秒的间隔或总的函数执行时间+ 5秒(如果函数本身需要很长的执行时间)被调用_fetchMarkersFromDb()
。我不希望它像现在这样并行运行。我听说可以使用Streams,但是对于在间隔内重复调用该函数时如何使用它们感到困惑。
可以找到完整的源代码here,而我要解决的问题是here。预先感谢。
我正在制作Flutter应用,我需要每5秒定期调用一个功能。这是我当前的实现:Timer.periodic(markerRefreshInterval,(Timer t){print('$ ...
我不知道数据库调用到底有什么返回类型(如果有的话,我在这里假设List<int>
,但是对于5秒或(执行时间+ 5秒),您可以使用类似下面的模拟方法:] >
import 'dart:math';
// simulating network call
Future<List<int>> _fetchMarkersFromDb() async {
await Future.delayed(Duration(seconds: Random().nextInt(7)));
return [Random().nextInt(993) + 27, Random().nextInt(28) + 4];
}
Stream<List<int>> _timer() async* {
while (true) {
yield await _fetchMarkersFromDb();
await Future.delayed(Duration(seconds: 5));
}
}
void main() {
_timer().listen(print);
}