Angularjs 几乎相同的函数在$interval循环中的行为不同
我正在使用Cordova构建一个应用程序,它使用找到的Angularjs 几乎相同的函数在$interval循环中的行为不同,angularjs,cordova,bluetooth-lowenergy,cordova-plugins,setinterval,Angularjs,Cordova,Bluetooth Lowenergy,Cordova Plugins,Setinterval,我正在使用Cordova构建一个应用程序,它使用找到的ng Cordova bluetoothle库 我有两个基本功能: function isRunning(){ return bleReadisRunning() .then (function(response){ response = atob(response.value); debugWrite("Response@isRunning: " + response + "\n");
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);
}
首先,我尝试在loop()
函数中仅使用isRunning()
,例如:
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);
}
代码对我来说几乎是一样的,我不明白问题出在哪里
附言:我不知道这是否有帮助,但我正在使用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()
中的nodeJS端,这是一个onReadRequest,如果响应(res
)是一个只有一个属性的对象,例如{'status':'ok'}
,那么如果我给该对象添加了一个属性,例如{'status':'ok','temp':23},那么一切都按预期工作
然后整个过程就崩溃了
编辑。2:
因此,这似乎是一个大小问题。如果对象的大小大于此{'temp':24555555}
,则对象中的一个属性将崩溃。如果我在值中再加上一个5,它就会发疯