- 需求的场景描述(希望解决的问题)
let buf; if (bluetoothType == "jeez" ) { //简易蓝牙的指令 buf = that.string2buffer( "open:05s" ); } if (bluetoothType == "mac" ) { //门禁机的指令 buf = that.string2buffer( "-b&-3-12069-" ); } if (bluetoothType == "jz" ) { //嵌入式门禁开门指令 //获取用户的门禁权限列表 let powerList_url = 'CustomerAPI/Index.aspx?method=getdoorsauthpool&clientcode=559574802685&doornumber=qrs001' ; http.get(powerList_url).then(res => { // let hex = '0101fe 010201' let hex = res.data; //16进制字符串转为ArrayBuffer let typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map( function (h) { return parseInt(h, 16) })) buf = typedArray.buffer }). catch (res => { }); } //发送开门指令 wx.writeBLECharacteristicValue({ deviceId: deviceId, serviceId: serviceId, characteristicId: write_id, value: buf, success: function (res) { console.log( "buf" , buf); console.log( "write-suc" , res); }, fail(res) { console.log(res); //发送开门指令失败时提示 that.openDoorFail(deviceId); } }) |
因为只有一个if中需要请求接口,所以不希望将wx.writeBLECharacteristicValue加入到promise.then中,有能么办法能让这段代码同步执行吗?
wx.writeBLECharacteristicValue 这一团内容写成一个方法
在最后一个if里加个else,调用方法,另外在网络请求的回调里也写上调用该方法
如果写成方法,在异步中调用,我不知道会不会影响到
notify通知模式:wx.notifyBLECharacteristicValueChange
的特征值变化监听:wx.onBLECharacteristicValueChange,
不知道卢大神对蓝牙有没有研究过,我就是怕这个地方会有问题,而且现在还没办法调试,我先按你说的写,然后能调试了再试试看
就算你用Promise,其实也只是跳过了当前方法,下一次onChange该进的时候,还是会进
没玩过蓝牙,只看了API。。哈。。哈哈哈。。纸上谈兵
嗯嗯,多谢了,我先这样写着,不过还是希望wx.request的API中能有个参数来决定是同步还是异步