如何在小程序中等待多个异步调用结果,写同步JS代码。(地理,wifi获取)

最近在做小程序打卡的需求总结如下:

1、等到多个异步结果,再写业务逻辑。

2、小程序再安卓机器上,无法获取(单人单账户登录的企业网络)wifi信息。

问题1处理:使用promise.all,正常情况下,promise.all是返回全部resolve结果,遇到失败的就优先返回第一个失败的结果,这里我们使用的时候,需要特殊处理,不使用reject。

 // 获取用户打卡信息
            Promise.all([this.getConnectedWifi(),this.getLocationInfo()]).then(res => {
                    console.log(res,'-------------res');
                    //获取wifi和位置信息后做一些事情
                    doSomething();
            });  

getConnectedWifi(){
        let _this = this;
        let wifiMacBean = {name:'',mac:''};
        
        return new Promise((resolve,reject)=>{
            wx.getConnectedWifi({
                success:function(data){
                    if(data.wifi){
                    wifiMacBean.name = data.wifi.SSID;
                    wifiMacBean.mac = data.wifi.BSSID;
                        _this.setData({
                            wifiMacBean
                        });
                    }
                    resolve({code:0,data:data.wifi});
                },
                fail:function(err){
                    resolve({code:1,data:err});
                    // return false;
                },
            });
        });
    },

getLocationInfo(){
         //查询用户权限
       return new Promise((resolve,reject)=>{
            wx.getSetting({
            success: res => {
                    //没有允许地理位置
                    if (!res.authSetting['scope.userLocation']) {
                        wx.authorize({
                            scope: 'scope.userLocation',
                            success: _ => {
                               resolve(this.getLocation()) ;
                            },
                            fail: res => {
                               resolve(this.openConfirm()) ;
                            }
                        });
                    } else {
                        resolve(this.getLocation());
                    }
                }
            });
       }); 
    },
getLocation(){
        // 获取经纬度
        let _this = this;
       return new Promise((resolve,reject)=>{
           
            wx.getLocation({
            isHighAccuracy:true,
            type: 'gcj02',
            success:function(data){
                const { latitude, longitude} = data;
                console.log( latitude, longitude,'-----------经纬度');
                let  myAmapFun = new amapFile.AMapWX({ 
                    key: '高德地图的key'
                });
                myAmapFun.getRegeo({
                    success (res) {
                        let locationBean ={
                                name: res[0].name, // 名称
                                address: res[0].regeocodeData.formatted_address, // 地址
                                longitude: longitude, // 经度
                                latitude: latitude, // 纬度
                                scope: 0 // 多少范围内可打卡, 单位:米
                            };
                        // const address = res[0].regeocodeData.formatted_address;
                        _this.setData({
                            locationBean
                        });
                        resolve({code:0,data:data});
                    },
                    fail (err) {
                        resolve({code:1,data:err});
                    }
                });
            }
        });
       }); 
    },

 

 

 

你可能感兴趣的:(小程序)