Я создаю приложение cordova , используя angularJS и плагин ng-cordova-bluetoothle для центральной стороны при использовании nodeJS с bleno для периферийной стороны малинового Pi.
На периферийной стороне я построил characteristic
с доступным только свойством read и выглядит так:
// GET TEMP CHARACTERISTIC
new bleno.Characteristic({
value:null,
uuid: settings.get_temp_characteristic_id,
properties: ['read'],
onReadRequest: function(offset, callback){
getTemp()
.then( (res) => {
var buffer = Buffer.from( JSON.stringify(res) );
callback(this.RESULT_SUCCESS, buffer);
})
}
})
function getTemp(){
return axios.get('http://127.0.0.1:8000/get_temp')
.then( (res) => {
console.error(res.data);
return res.data;
})
.catch( (error) => {
console.error(error);
return error;
})
}
Теперь в центральной части у меня есть функция, которая создает запрос на чтение к периферийному устройству следующим образом:
function getTemp(){
return bleReadgetTemp()
.then (function(response){
var bytes = bluetoothle.encodedStringToBytes(response.value);
var string = bluetoothle.bytesToString(bytes);
var response = JSON.parse(string);
//response = JSON.parse(atob(response.value));
Log.add("[+] getTemp: " + JSON.stringify(response) );
var tempTimePoint = { time: Date.now() / 1000, y: response.temp };
// Push the temp value into rootScope vars.
$rootScope.experiment.actualTemp = [];
$rootScope.experiment.actualTemp.push( tempTimePoint );
$rootScope.experiment.historyTemp[0].values.push( tempTimePoint );
Log.add("[+] TempBuffer: " + $rootScope.experiment.actualTemp[0] );
return response;
})
.catch( function(error){
Log.add('[!] getTemp Error' + JSON.stringify(error));
})
}
Так вот в чем проблема.В случае, когда сторона nodeJS отправляет объект, такой как {"temp": 2455555555}
, все работает отлично и как положено.Но если цифры возвращаемой температуры больше 10 или вообще, объект становится больше, что-то вроде {"temp":232, "status": "OK"}
, тогда вся вселенная падает, и я получаю (в центральной части) ошибку
[!] Ошибка getTemp {}
УВЕДОМЛЕНИЕ:
Еще одна вещь, которую я заметил, этоследующие.В центральной части я вызываю функцию getTemp()
внутри интервального вызова, например $interval( function(){ getTemp(); }, 5000)
.Таким образом, пока объект JSON находится в своей небольшой версии, этот интервал запускает функцию каждые 5 секунд.Если объект JSON становится больше, то интервал вызывает функцию непрерывно.
Итак, что происходит?Есть ли проблема переполнения?Я неправильно преобразовываю данные JSON?
Любая идея или намек действительно приветствуются.