如何找到写入回调是由哪个外设触发的?

How can I find which peripheral a write callback was triggered by?

我正在制作一个 Chrome 应用程序,该应用程序涉及连接到多个 BLE 外围设备并同时向它们发送写入消息。我需要知道每个写操作何时在哪个外围设备上完成,以便我可以为该外围设备启动更多操作,但似乎没有办法从回调函数中引用外围设备。回调函数作为参数传递给蓝牙API写入函数:

chrome.bluetoothLowEnergy.writeCharacteristicValue(string characteristicId, ArrayBuffer value, function callback)

The API说明READ回调函数有一个特征参数:

function(Characteristic result) {...};

然后我一直在使用 result.service.deviceAddress 来查找回调针对哪个设备。但是WRITE回调没有参数。

这使我无法引用已写入的外围设备,因此我无法确定是哪个外围设备导致了对 运行 的写入回调。我可以看到您可以通过为固定数量的设备中的每一个设置一个唯一的回调函数来做到这一点,但是有人可以详细说明如何使用单个回调函数更动态地做到这一点吗?

我最终为回调添加了一个共享函数(d 是一个 Device 实例):

var writeCallback = function (d) {
  //...
}

然后,在我跟踪设备的对象中,我添加了一个 属性 用于使用 this:

调用此函数
class Device {
  constructor(device) {
    //...
    this.writeCallbackLink = (function () {
      writeCallback(this);
    }).bind(this);
  }
}

bind(this) 对于确保 this 指的是实际对象而不是 运行 时间上下文至关重要。然后,当我调用 API 函数时,我使用回调 link:

chrome.bluetoothLowEnergy.writeCharacteristicValue(d.write.instanceId,
  data_buffer, d.writeCallbackLink);

这会导致 writeCallback 变为 运行,触发它的 d 作为参数。