我有这个 Future 和我的代码模板,如下所示:
Future getDevices() async {
stream.listen();
Timer.periodic(Duration(seconds:5), (timer) {
POST TO SERVER.then((value){
return Future.value(value);
});
});
}
我正在收听流以扫描信标设备。我在这个 Stream 的 Listen 函数中填充了名为“信标”的产量。使用 Timer.periodic,我控制名为“信标”的产量并执行 POST 操作。我想在这个 POST 操作的“then”上返回 Future.value。但是 Future 返回 null 而不等待 POST 操作的结果。
我试过这样的完成器:
Future getDevices() async {
final completer = Completer();
stream.listen();
Timer.periodic(Duration(seconds:5), (timer) {
POST TO SERVER.then((value){
return completer.complete(value);
});
});
return completer.future;
}
但这次我也收到了这个错误:"Unhandled Exception: Bad state: Future already completed"
编辑:我尝试使用 Stream.asyncMap 但结果相同。
Stream myStream = Stream.periodic(Duration(seconds: 5), (timer) async {
beacons.removeWhere((key, value) =>
DateTime.now().difference(value['lastUpdate']).inSeconds > 6);
if (beacons.isNotEmpty) {
bool processResult = false;
beacons.forEach((key, value) async {
if (int.parse(value['onlyEnterance'].toString()) == 1 &&
double.parse(value['distance'].toString()) <
double.parse(value['minDistance'].toString())) {
await userRepo
.createPayrollTracking(context, forEnter, value['dbId'])
.then((value) {
processResult = value;
if (value == true) {
stopMonitoring();
}
});
return await Future.value(processResult);
}
});
}
}).asyncMap((event) async => await event);