我制作的Chrome应用程序涉及连接多个BLE外设并同时向其发送写入消息。我需要知道每个写操作何时完成在哪个外设上,这样我就可以为该外设启动更多操作,但似乎并不是从回调函数引用外设的方法。回调函数作为参数传递给蓝牙API写入功能:
chrome.bluetoothLowEnergy.writeCharacteristicValue(string characteristicId, ArrayBuffer value, function callback)
The API表明READ回调函数有一个特征参数:
function(Characteristic result) {...};
然后我一直在使用result.service.deviceAddress
来查找回调所针对的设备。但WRITE回调没有参数。
这使我无法引用写入的外设,因此我无法确定哪个外设导致此写回调运行。我可以看到你可以通过为固定数量的设备中的每一个设置唯一的回调函数来实现这一点,但有人可以使用单个回调函数详细说明如何更动态地执行此操作吗?
答案 0 :(得分:0)
我最后为回调添加了一个共享函数(d
是Device
个实例):
var writeCallback = function (d) {
//...
}
然后,在跟踪设备的对象中,我使用this
添加了一个调用此函数的属性:
class Device {
constructor(device) {
//...
this.writeCallbackLink = (function () {
writeCallback(this);
}).bind(this);
}
}
bind(this)
对于确保this
引用实际对象而不是运行时上下文至关重要。然后,当我调用API函数时,我使用回调链接:
chrome.bluetoothLowEnergy.writeCharacteristicValue(d.write.instanceId,
data_buffer, d.writeCallbackLink);
这会导致writeCallback
与d
一起运行,并将其作为参数触发。