我正在做一个项目,其中一个想要使用网络蓝牙连接到BLE设备。我查看了多个教程,并试图让这些教程发挥作用。在下面的代码中,我得到了设备的特征。代码可以工作,但我不知道为什么。
我希望我的承诺在找到并连接到设备时激活。但是,当我在promise中放置连接.then时,当我启动应用程序时,另一个.then已经激活了。
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();
});
})
}发布于 2019-09-18 16:58:15
你需要
当一系列操作完成时,function.
您的问题示例,修改为//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();
});
})
}https://stackoverflow.com/questions/57968195
复制相似问题