Javascript 网络蓝牙与承诺

Javascript 网络蓝牙与承诺,javascript,bluetooth,bluetooth-lowenergy,web-bluetooth,Javascript,Bluetooth,Bluetooth Lowenergy,Web Bluetooth,我正在进行一个项目,其中一个用户希望使用web蓝牙连接到一个可扩展设备。我查阅了多个教程,并试图让它们发挥作用。 在下面的代码中,我得到了设备的特性。 代码是有效的,但我不知道为什么 我希望我的承诺在找到并连接到设备时激活。但是,当我把连接。然后在承诺另一个。然后已经激活时,我启动应用程序 function read() { let prom = new Promise(function (resolve, reject) { navigator.bluetooth.re

我正在进行一个项目,其中一个用户希望使用web蓝牙连接到一个可扩展设备。我查阅了多个教程,并试图让它们发挥作用。 在下面的代码中,我得到了设备的特性。 代码是有效的,但我不知道为什么

我希望我的承诺在找到并连接到设备时激活。但是,当我把连接。然后在承诺另一个。然后已经激活时,我启动应用程序

function read() {
    let prom = new Promise(function (resolve, reject) {
        navigator.bluetooth.requestDevice({
            acceptAllDevices: true,
            optionalServices: []
        })
            .then((device) => {
                console.log('Discovered', device);
                PCB= device;
                resolve();
                return PCB.gatt.connect();
            })
            .then(server => {
                gattServer = server;
                console.log('getting server');
                return gattServer.getPrimaryService(0x1815);
            })
            .then(service => {
                console.log('getting characteristic');
                if(0x2a56){
                    return service.getCharacteristic(0x2a56);
                }
                return service.getCharacteristic();
            })
            .then(characteristics => {
                console.log('> Characteristics: ' + characteristics + characteristics.map(c => c.uuid).join('\n' + ' '.repeat(19)));
            })
            .catch(error => {
                console.log(error);
                reject();
            });
    })
}

你需要

  • 从你的职能中回报你的承诺
  • 当操作顺序完成时,解决您的承诺
  • 您的问题示例,用//1和//2修改

    function read() {
      return new Promise(function(resolve, reject) { // 1
        navigator.bluetooth.requestDevice({
            acceptAllDevices: true,
            optionalServices: []
          })
          .then((device) => {
            console.log('Discovered', device);
            PCB = device;
            resolve();
            return PCB.gatt.connect();
          })
          .then(server => {
            gattServer = server;
            console.log('getting server');
            return gattServer.getPrimaryService(0x1815);
          })
          .then(service => {
            console.log('getting characteristic');
            if (0x2a56) {
              return service.getCharacteristic(0x2a56);
            }
            return service.getCharacteristic();
          })
          .then(characteristics => {
            console.log('> Characteristics: ' + characteristics +
              characteristics.map(c => c.uuid).join('\n' + ' '.repeat(19)));
            resolve(); // 2
          })
          .catch(error => {
            console.log(error);
            reject();
          });
      })
    }
    

    我不明白。“另一个。然后,当我启动应用程序时,它已经激活了”,但这个承诺不应该是一种检查设备是否连接的方式吗?我找不到一个像样的promise示例,除了“timeout”函数之外,它还使用了其他功能。我对承诺的了解还不够充分,以至于我不能完全理解它是如何工作的。如果我想在另一个功能中继续履行承诺呢?如何传递requestDevice承诺?从函数中返回承诺。e、 要从服务器返回服务,您可以:函数getBatteryService(server){return server.getPrimaryService('battery_service')}您应该先阅读或观看有关如何使用承诺的教程。然后将它们与齿一起使用。从函数返回承诺不是蓝牙特有的。此Web Bluetooth示例确实返回了一个承诺,并将其用于其他功能: