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

本文介绍了在小程序开发中如何等待多个异步调用完成后再执行业务逻辑,特别讨论了在安卓设备上无法获取特定网络WiFi信息的问题,并提出使用Promise.all但避免reject的解决方案。
摘要由CSDN通过智能技术生成

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

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;
       
小程序的`onShow`生命周期函数,如果你想同步地循环调用接口,你可以使用`async/await`结合`for...of`循环来实现。以下是一个示例的小程序JS文件代码: ```javascript // 假设数组名为items,接口函数名为callAPI // 定义一个函数,用于调用接口 function callAPI(item) { return new Promise((resolve, reject) => { // 调用接口的逻辑 // ... // 这里可以使用wx.request或其他方法调用接口,处理返回结果等 // 假设接口返回的是Promise对象,你可以直接返回该Promise对象,或者根据接口返回的具体数据进行适当的处理后再返回 resolve(/* 接口返回的数据 */); }); } // 定义小程序页面的Page对象 Page({ onShow() { // 循环遍历数组并同步调用接口 async function loopArrayAndCallAPI(items) { for (let item of items) { await callAPI(item); } console.log('所有接口调用完成'); } // 调用函数,传入数组进行循环调用接口 const items = [ /* your array here */ ]; loopArrayAndCallAPI(items) .catch((error) => { console.error('接口调用出错:', error); }); }, }); ``` 上述代码小程序页面的`onShow`生命周期函数定义了一个异步函数`loopArrayAndCallAPI`,在该函数内部使用`for...of`循环遍历数组并通过`await`关键字等待每个接口调用完成。这样可以保证每次循环在接口调用完成后再进行下一次循环。在循环结束后,会打印出"所有接口调用完成"的消息。 你可以根据实际需求在`callAPI`函数接口调用的逻辑,并根据需要处理接口返回的数据。在调用`loopArrayAndCallAPI`函数时,你可以通过`.catch()`方法来处理接口调用出错的情况。请注意,这只是一个示例代码,你需要根据自己的实际需求进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值