我正在使用Cordova构建应用程序,该应用程序使用here的ng-cordova-bluetoothle
库。
我有两个基本功能:
function isRunning(){
return bleReadisRunning()
.then (function(response){
response = atob(response.value);
debugWrite("Response@isRunning: " + response + "\n");
if(response.status){
// Do nothing
} else{
// Stop the loop
}
return response;
})
.catch( function(error){
console.log("isRunning");
});
}
function getTemp(){
return bleReadgetTemp()
.then (function(response){
response = atob(response.value);
debugWrite("Response@getTemp: " + response + "\n");
if(response.status){
// Do nothing
} else {
// Stop the loop :p
}
return response;
})
.catch( function(error){
console.log("getTemp");
})
}
我试图做的是在指定的间隔时间内连续执行这两个功能。因此,我使用了angularJS的$interval
服务并编写了以下代码。
vm.startExperimentLoop = function() {
vm.myCall = $interval( loop, 5000);
};
vm.apiStop = function(){
$interval.cancel(vm.myCall);
}
首先,我尝试仅在isRunning()
函数中使用loop()
,例如:
function loop(){
isRunning();
}
经过测试,一切都按预期进行。 isRunning()
的调用每5秒发生一次。但是,如果我更改loop()
函数并使其运行getTemp()
,似乎5秒钟的间隔不会持续,并且getTemp()
被连续调用。
这里还有bleReadisRinning()
和bleReadgetTemp()
函数。
function bleReadisRunning(){
var service_id = '12ab';
var characteristic_id = '32cd';
var params = {
address: $stateParams.address,
service: service_id,
characteristic: characteristic_id,
};
return $cordovaBluetoothLE.read(params);
}
function bleReadgetTemp(){
var service_id = '12ab';
var characteristic_id = '31cd';
var params = {
address: $stateParams.address,
service: service_id,
characteristic: characteristic_id,
};
return $cordovaBluetoothLE.read(params);
}
对我来说代码似乎几乎相同,而且我不明白问题可能出在哪里。
P.S:我不知道这是否有帮助,但是我正在使用nodeJS
和bleno
库来设置我的外围设备。贝娄是我设置这两个特征的方法,但是我仍然找不到任何可以解释$interval
问题的大差异。
// IS RUNNING CHARACTERISTIC
new bleno.Characteristic({
value: null,
uuid: settings.is_running_characteristic_id,
properties: ['read'],
onReadRequest: function(offset, callback){
isExperimentRunning()
.then( (res) => {
var buffer = Buffer.from( JSON.stringify(res) );
callback(this.RESULT_SUCCESS, buffer);
})
}
}),
// 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);
})
}
})
编辑:
我发现了一些东西,但不确定为什么会发生。
因此,在函数getTemp()
的onReadRequest的nodeJS端,如果响应(res
)是只有一个属性的对象,例如{'status':'ok'}
,那么一切都按预期工作,如果我再为该对象添加一个属性,例如{'status':'ok', 'temp':23}
,那么整个过程就会崩溃。
EDIT.2:
所以这似乎是一个大小问题。如果对象的大小大于此{'temp':2455555555}
,则对象中只有一个属性都会崩溃。如果我再增加5的值,它就会发疯。