Node.js 使用WebBluetooth访问多个服务和特性
我试图读取体重秤特征以及电池服务中的当前电池电量 我有以下几点可以用于体重秤服务和体重测量特性,但我很难看到如何将电池服务添加到这一点上(我不太熟悉承诺)Node.js 使用WebBluetooth访问多个服务和特性,node.js,web-bluetooth,Node.js,Web Bluetooth,我试图读取体重秤特征以及电池服务中的当前电池电量 我有以下几点可以用于体重秤服务和体重测量特性,但我很难看到如何将电池服务添加到这一点上(我不太熟悉承诺) 要访问电池服务,您需要调用server.getPrimaryService(“电池服务”),然后对生成的BluetoothGATTRemoteService对象调用getCharacteristic(“电池级别”)。请参阅完整示例 正如您所确定的挑战是,目前使用Promises编写的server变量在这个Promise链的末尾不再可用。有几种
要访问电池服务,您需要调用
server.getPrimaryService(“电池服务”)
,然后对生成的BluetoothGATTRemoteService对象调用getCharacteristic(“电池级别”)
。请参阅完整示例
正如您所确定的挑战是,目前使用Promises编写的server
变量在这个Promise链的末尾不再可用。有几种解决方案。一种是像这样使用async/await
console.log('连接到GATT服务器…');
const server=wait device.gatt.connect();
console.log('获取电池服务…');
const service=await server.getPrimaryService('battery_service');
log('获取电池电量特性…');
const characteristic=等待服务。getCharacteristic(“电池电量”);
或者,您可以将server
变量提升到函数的顶层,并在调用connect()
后在then()
回调中分配它,以便您可以从多个then()
回调中使用它
function connectGATT() {
if (bluetoothDeviceDetected.gatt.connected && gattCharacteristic) {
return Promise.resolve()
}
return bluetoothDeviceDetected.gatt.connect()
.then(server => {
console.log('Getting GATT Service...')
return server.getPrimaryService(wsService)
console.log(wsService)
})
.then(service => {
console.log('Getting GATT Characteristic...')
return service.getCharacteristic(wsCharacteristic)
console.log(wsCharacteristic)
})
.then(characteristic => {
gattCharacteristic = characteristic
gattCharacteristic.addEventListener('characteristicvaluechanged',
handleNotifications)
document.querySelector('#start').disabled = false
document.querySelector('#stop').disabled = true
})
}