我是javascript新手,所以我可能有一些非常规的编程方式。 就是说,我正在一个项目中,我需要向自定义BLE设备读写数据。 我正在使用gatt服务器协议进行连接。 我可以与设备建立连接,但现在我正尝试从寄存器中读取数据。
我浏览了谷歌的网络示例以及网络蓝牙github,但我对此一无所知。下面的代码是我目前试图打破这一点。较早的尝试使我陷入了这样一个事实:我获得的值是一个对象或一个promise对象。
function readFromPcb() {
let p2 = new Promise((resolve, reject) => {
if (device.connected === false) {
reject('network Error');
}
})
.then(characteristic => {
readValue = characteristic.readValue();
console.log('data is: ' + readValue);
})
.catch(error => {
console.log('error: ' + error + DOMException.name);
});
}
答案 0 :(得分:1)
我对Web蓝牙了解不多,但是我注意到您的最大诺言从未解决。如果设备未连接,它要么拒绝,要么...什么都不做。如果要运行then
回调,则需要在主要承诺中的某个时刻调用resolve()
。就是说,由于您显式构造了这个诺言,因此它所解析的值将是您自己传递给resolve()
的任何参数;听起来不像你想要的。什么功能应该给您“特色”?那就是可能返回承诺的那个,您不需要自己构造一个,您可以将其他then
回调链接到它为您返回的承诺上。
答案 1 :(得分:0)
我成功了!我需要访问网络蓝牙的特征级别。之后,我可以使用connect函数的promise将.then链接到我的read函数。
感谢您的帮助。
function readFromPcb() {
prom.then(_ => {
console.log('getting data...');
gattChar.readValue();
})
.catch(error => {
console.log('error: ' + error + ' ' + DOMException.name);
});
}