如何知道何时monitorCharacteristic与react native ble plx完成?



我在我的项目中使用react-native-ble-plx与我的工具进行通信,并且我正在尝试监视它的一个特性。

结果是相当长的,所以monitoringCharacteristic函数是循环,直到它已经发送给我的一切,但我不知道如何确保循环完成。

下面是我的监控功能:

const scanMyDevice = async (device) => {
const serviceUUID = '569a1-****'
const writeUUID = '569a2-****'
const readUUID = '569a2-****'
await device.discoverAllServicesAndCharacteristics()
await device.characteristicsForService(serviceUUID)
await device.writeCharacteristicWithResponseForService(serviceUUID, writeUUID, 'IzEwCg==')
var tempTrame = ''
const subscription = device.monitorCharacteristicForService(serviceUUID, readUUID, (error, a) => {
if (error) {
console.log(error)
console.log(error.message)
}
else {
tempTrame = tempTrame + base64.decode(a.value)
setTrameResult(tempTrame)
console.log('// INSIDE ///', tempTrame)
}
}, 'idMonitor')
return () => {
subscription.remove();
}
console.log('DONE')
}

在我的代码中,'DONE'将被打印在'INSIDE frame '之前。

我试着把console.log('DONE')放在return里面,但是它从来没有被打印出来。我试着把.then( console.log('DONE'))放在return之前,但它给我发了一个错误,说它在这里没有任何关系…

有人能帮帮我吗?

最后,我通过定义一个结束模式来解决这个问题,我想通过BLE发送/读取的信息,然后我写了一个循环来继续读取,而没有遇到结束模式:

let tempTrame = tempTrame + base64.decode(a.value)
let finalTrame = ''
// check if my variable has the end symbols (to be sure that I have all the information) and if it is the first time I get this information
if (tempTrame.includes('#109F')) {
stop = true
// suppress end symbols
tempTrame = tempTrame.replace(endTrame, '')
finalTrame = tempTrame
}
console.log(finalTrame)

我决定创建一个单独的函数来处理a.p value,我在循环结束时从服务器发送' startxflag '和'endTXflag':

///////////////////////GET CHUNKS /////////////////////////
const processCharacteristicValue = (characteristicValue) => {
const decodedValue = base64.decode(characteristicValue);
if (decodedValue.startsWith('startTXflag')) {
setAllChunksReceived(false);
setConcatenatedData('');
} else if (decodedValue.startsWith('endTXflag')) {
setAllChunksReceived(true);
setonLoadingSpinner(false);
} else if (!allChunksReceived) {
// Append the decoded value to the temporary buffer
setConcatenatedData((prevData) => prevData + decodedValue);
}
};

你注意到块的数量有限制吗?我可以从服务器发送任何块,但我的客户端在收到17块后停止监控。非常奇怪的

相关内容

  • 没有找到相关文章

最新更新