前言
后臺告訴我,很多藍牙狀態不對,我和他對了一下,發現是我這里藍牙監聽有問題,但是并沒有任何報錯,我細看了一下原來的寫入代碼,
發現早期的代碼,是這樣:
setTimeOut(function(){
//具體的寫入命令省略
this.writeBLECharacteristicValue(cmd1);
},100);
setTimeOut(function(){
//具體的寫入命令省略
this.writeBLECharacteristicValue(cmd2);
},200);
setTimeOut(function(){
//具體的寫入命令省略
this.writeBLECharacteristicValue(cmd3);
},300);
后來被改造的后
//寫入命令1
this.writeBLECharacteristicValue(cmd1);
//寫入命令2
this.writeBLECharacteristicValue(cmd2);
//寫入命令3
this.writeBLECharacteristicValue(cmd2);
改造的原因很簡單,因為時間等待那個,本身也不可靠,老是狀態不對.
我覺得主要原因是同時寫入的問題,于是我把代碼改成異步方式
new Promise(function(resolve, reject) {
this.writeBLECharacteristicValue(cmd1,function(){
//寫入完成的回調函數
resolve("1");
});
}).then(res => {
return new Promise(function(resolve, reject) {
this.writeBLECharacteristicValue(cmd2,function(){
//寫入完成的回調函數
resolve("2");
});
});
}).then(res => {
return new Promise(function(resolve, reject) {
this.writeBLECharacteristicValue(cmd2,function(){
//寫入完成的回調函數
resolve("2");
});
});
}).then(res => {
console.log("執行寫入完成");
});
通過 Promise 來把寫入指令的順序排好,一步步執行,這樣,即確保了速度,也確保了有序,而且,結果也正確了