Просмотр исходного кода

增加调用队列延迟 暂定100毫秒

wzh 2 лет назад
Родитель
Сommit
4a8f915a98
1 измененных файлов с 68 добавлено и 17 удалено
  1. 68 17
      utils/weitiandi/device/device.js

+ 68 - 17
utils/weitiandi/device/device.js

@@ -210,22 +210,22 @@ const dataParser = {
             'MONEY 2\n' +
             'MONEY 2\n' +
             'TIME 2\n' +
             'TIME 2\n' +
             'PORT_SECOND_STATUS\n' +
             'PORT_SECOND_STATUS\n' +
-            'POWER 2\n' +
-            'ELEC 2\n' +
-            'MONEY 2\n' +
-            'TIME 2',
+            'POWER_1 2\n' +
+            'ELEC_1 2\n' +
+            'MONEY_1 2\n' +
+            'TIME_1 2',
         morldouble:'PORT_FIRST_STATUS\n' +
         morldouble:'PORT_FIRST_STATUS\n' +
             'POWER 2\n' +
             'POWER 2\n' +
             'ELEC 2\n' +
             'ELEC 2\n' +
             'MONEY 2\n' +
             'MONEY 2\n' +
             'TIME 2\n' +
             'TIME 2\n' +
             'PORT_SECOND_STATUS\n' +
             'PORT_SECOND_STATUS\n' +
-            'POWER 2\n' +
-            'ELEC 2\n' +
-            'MONEY 2\n' +
-            'TIME 2\n' +
-            'VOLTAGE\n' +
-            'DEV_TEMPER\n'
+            'POWER_1 2\n' +
+            'ELEC_1 2\n' +
+            'MONEY_1 2\n' +
+            'TIME_1 2\n' +
+            'DEV_TEMPER\n' +
+            'VOLTAGE\n'
     }
     }
 }
 }
 function parseData(arr){
 function parseData(arr){
@@ -301,7 +301,9 @@ function parseProp(arr,str){
             datas.push(arr[j]);
             datas.push(arr[j]);
         }
         }
         let aLong = cmdToDec(datas);
         let aLong = cmdToDec(datas);
-        obj[keyProps[0].toLowerCase()] =  aLong;
+        let propKey = keyProps[0].toLowerCase();
+        obj[propKey] =  aLong;
+
         index+=num;
         index+=num;
     }
     }
     return obj;
     return obj;
@@ -346,8 +348,11 @@ function sendBlueData(tempSendData){
         .replace(/\s*/g, '')
         .replace(/\s*/g, '')
         .replace(/\n/g, '')
         .replace(/\n/g, '')
         .replace(/\r/g, '')
         .replace(/\r/g, '')
-    console.log("写入数据:"+data);
-    ecBLE.writeBLECharacteristicValue(data, true)
+    throttle(function() {
+        console.log("写入数据:"+data+","+new Date().toLocaleTimeString());
+        ecBLE.writeBLECharacteristicValue(data, true)
+    }, 100)();
+
 }
 }
 /**
 /**
  * 二进制补0
  * 二进制补0
@@ -503,18 +508,64 @@ export function getUUID(){
     });
     });
 }
 }
 
 
+//--------------------------------
+let queue = Promise.resolve();
+
+function throttle(func, delay) {
+    return function(...args) {
+        queue = queue.then(() => {
+            func.apply(this, args);
+            return new Promise(resolve => {
+                setTimeout(resolve, delay)
+                doResetTime(delay);
+            });
+        });
+    };
+}
+
+// 使用方法:
+const myFunction = throttle(function() {
+    console.log('这是一个调用请求'+new Date());
+}, 1000);
+
+
+let resetTimer = null;
+
+function doResetTime(delay){
+    if(resetTimer == null){
+        resetTimer = setTimeout(function (){
+            console.log("reset timer"+new Date());
+            queue = Promise.resolve();
+        },delay);
+    }else{
+        clearTimeout(resetTimer);
+        resetTimer = null;
+        doResetTime(delay);
+    }
+}
+
+//--------------
+
+
+
+
 function test(){
 function test(){
-    let data = 'AA 67 14 02 00 00 00 00 01 F4 4C 00 01 00 00 00 00 F4 01 4C 00 1B E7 02';
+    let data = 'AA,67,14,02,00,00,00,00,50,C3,08,00,02,00,00,00,00,50,C3,14,00,15,E3,B9';
     data = data.trim();
     data = data.trim();
-    data = data.split(" ");
+    data = data.split(",");
 
 
     let arr = [];
     let arr = [];
     for (let i = 0; i < data.length; i++) {
     for (let i = 0; i < data.length; i++) {
         arr.push(parseInt(data[i],16)) ;
         arr.push(parseInt(data[i],16)) ;
     }
     }
-    arr = [170, 103, 20, 2, 56, 4, 0, 0, 200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 30, 232, 13]
     console.log(arr)
     console.log(arr)
     parseData(arr)
     parseData(arr)
 }
 }
-// test()
+
+function testQueue(){
+    for (let i = 0; i < 10; i++) {
+        sendBlueData(i+"");
+    }
+}
+// testQueue()