从 Bluetooth-le write 获取成功或失败响应

Get success or failure response from Bluetooth-le write

我在 Ionic React 项目中使用 Bluetooth-LE 社区插件。

我正在使用以下代码向 GATT 服务器写入一个值:

await BleClient.write(device.deviceId, SERV_SYSTEM_SETTINGS, CHAR_RTC, dvDateTime );

这工作正常,除了我需要能够设置一个标志变量来指示写入是成功还是失败。他们在文档中没有说明如何做到这一点。然而,他们也是一个

writeWithoutResponse(deviceId: string, service: string, characteristic: string, value: DataView, options?: TimeoutOptions | undefined) => Promise<void>

这意味着

write(deviceId: string, service: string, characteristic: string, value: DataView, options?: TimeoutOptions | undefined) => Promise<void>

应该 return 成功或失败响应。

我已经尝试了一个相当新的举动,希望响应可以被如下所示的变量捕获,但没有成功:

const writeFlag = await BleClient.write(device.deviceId, SERV_SYSTEM_SETTINGS, CHAR_RTC, dvDateTime );
console.log("WRITE FLAG: " + writeFlag);

但是 writeFlag 仍未定义。

如何从写入过程中获得响应?我可以手动检查 GATT 设备并查看设备是否正确接收了我的写入命令,但我需要能够在代码中对此 success/failure 采取行动。

I need to be able to set a flag variable to indicate whether the write was a success or failure. There is nothing in the docs to indicate how this can be done.

你 linked/shared 文档说的是 returned.

write(
  deviceId: string,
  service: string,
  characteristic: string,
  value: DataView,
  options?: TimeoutOptions | undefined
) => Promise<void>

它 return 是一个没有价值的 Promise,即像一个 void return。

如果 Promise 解决了这意味着写入成功,如果它拒绝了这意味着失败。

如果您需要“捕获”success/failure,或者更确切地说是 resolves/rejected 状态,您可以使用 try/catch 模式。

示例:

try {
  await BleClient.write(
    device.deviceId,
    SERV_SYSTEM_SETTINGS,
    CHAR_RTC,
    dvDateTime
  );
  // success!
  // set any local success flag
} catch(error) {
  // failure, and error is likely undefined because void value
  // set any local non-success flag
}