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
  })
}