Angularjs 几乎相同的函数在$interval循环中的行为不同

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");

我正在使用Cordova构建一个应用程序,它使用找到的
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,它就会发疯