1

我有这个 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);
4

0 回答 0