【发布时间】:2020-11-14 15:40:45
【问题描述】:
我有一个使用 BLE 通过蓝牙与设备通信的应用程序。它使用关贸总协定。简单来说,我向地址 1 发送命令,在地址 2 上接收响应。这与问题无关,但它有助于解释为什么“异步”函数无法以简单的方式检索响应。因此,要向 BLE 设备发送命令,我会执行如下操作:
await btwrite.write(command);
.write 方法是一个“Future<Null>”
现在的问题是我必须发送多个命令,每个命令都依赖于前一个命令。例如,这是流程:
Command 1 -> Response 1 -> Command 2 -> Response 2
在发送下一个命令之前,我必须等待响应。我只能使用异步函数发送,所以我必须像这样调用多个等待:
btread.value.listen((v) {
print('Response:' + v.toString());
});
await btwrite.write(command1);
await btwrite.write(command2);
在这种情况下,command2 可以在命令 1 之前返回结果。有没有办法一个接一个地执行多个“等待”方法,但只有在我确保之前的执行收到响应之后?
【问题讨论】:
-
显示写方法代码
-
你可以做类似
btwrite.write(command1).then(btwrite.write(command2).then(...)); -
@jitsm555 github.com/pauldemarco/flutter_blue,特别是这个github.com/pauldemarco/flutter_blue/blob/master/lib/src/…,第107行。这是一个插件,不是我写的。
-
@dev-aentgs 使用
.then()无济于事。await是.then()的语法糖,并且已经序列化了对btwrite.write()的调用。这里的问题是 OP 需要等待每个 response. -
@jamesdlin 完全正确,问题是响应不是来自该等待函数,而是来自另一个侦听器。
标签: flutter dart async-await bluetooth-lowenergy bluetooth-gatt