IT@程序员猿媛程序员

1.蓝牙的方法都是异步回调方法,不能同步执行

2019-03-29  本文已影响1人  小李不小

 本人换了一个工作,来到一个新公司,成功接手了一个很大的烂摊子,无力吐槽.面临的第一个问题,就是公司的项目刚刚上线,但是蓝牙和微信之间的连接,还经常有连接不上的情况,没有办法,我只能优先解决这个问题,虽然我从来没有做过小程序.

    测试了一下我们的产品,发现蓝牙经常会连接不上,而且搜索很慢.于是乎,我硬着头皮去啃原来的的源码.本来以为不会很麻烦,结果发现,掉进了一个很大的坑里.下面我分几篇文章来描述一下我重构时微信小程序功耗蓝牙的坑:

1.蓝牙的方法都是异步回调方法,不能同步执行

    这不算微信小程序的坑,算是这个项目的坑,我看到我们项目代码:

wx.closeBluetoothAdapter()// 关闭蓝牙模块wx.openBluetoothAdapter({

//初始化 蓝牙模块 成功 和 失败的回调       

success: res => {           

  console.log('初始化蓝牙成功' + res)                

//省略其他代码      },    

 fail: err => {       

console.log("开启模块失败);   

 }  })    

因为业务逻辑,我们需要先关闭蓝牙蓝牙模块,然后再重新开启,而这里wx.closeBluetoothAdapter 本身就是一个异步函数,我们必须等他关闭完成到success 方法才能够执行方法,所以我首先认为这是我们经常连接不上的原因.就改了这段代码,改后如下:

//关闭当前的蓝牙模块  wx.closeBluetoothAdapter({    

  success: (res) => {        

 console.log("关闭蓝牙模块成功", res);        

 //重新打开蓝牙模块       

 wx.openBluetoothAdapter({ //初始化 蓝牙模块 成功 和 失败的回调          

success: res => {                        

 console.log('初始化蓝牙成功', res)         

   }, fail: err => {                  

  console.log('初始化蓝牙是否开启:', err);          

  }, complete: function(res) {                

     console.log('初始化蓝牙执行完成:', res) }       })  },

fail: (err) => {     

console.log("关闭蓝牙模块出错", err);  }, 

complete: (res) => {  

console.log("关闭蓝牙模块完成的", res); // ignore},   });

这一块就是小程序手机蓝牙的模块 断开和低功耗蓝牙断开,同学们,记住一句话,就行了,小程序api全是异步的,你必须等api success执行成之后,在去调用你要执行的下一个方法。

上一篇下一篇

猜你喜欢

热点阅读