Javascript 网络蓝牙与承诺
我正在进行一个项目,其中一个用户希望使用web蓝牙连接到一个可扩展设备。我查阅了多个教程,并试图让它们发挥作用。 在下面的代码中,我得到了设备的特性。 代码是有效的,但我不知道为什么 我希望我的承诺在找到并连接到设备时激活。但是,当我把连接。然后在承诺另一个。然后已经激活时,我启动应用程序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
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();
});
})
}
你需要
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示例确实返回了一个承诺,并将其用于其他功能: