• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

微信/头条小程序如何确保异步请求执行完后再执行各页面的onLoad方法 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

微信/头条小程序如何确保异步请求执行完后再执行各页面的onLoad方法

在开发的过程中,由于小程序生命周期的执行顺序是不可暂停的,以登录权限为例:
当进入小程序时首先执行app.js的onLaunch--onShow方式后再执行b页面的onLoad方法,b页面需要弹出提示登录的弹窗,当服务器返回需要一定时间或网络较差时,此时小程序已经执行了b页面的方法,导致在登录接口还没有返回前就已经在b页面判断了权限。

app.js

onLaunch() {
    loginByCode().then(resolve => {
        //do something
    });
}
loginByCode() {
    return new Promise(resolve => {
        wx.request({
            url: \'https://xxx.com\',
            method: \'GET\',
            data: {},
            success: ({
                data,
                statusCode,
                header
            }) => {
                //接口返回结果后将登录状态置为true
                app.globalData.loginPermissions = true;
                resolve();
            }
        }) 
    });
}

这里我们在小程序冷启动时onLaunch中做了个简单的异步请求。

页面b.js

onLoad() {
    //当进入此页面时,需要判断是否已登录用户,如果没有登录需要弹出登录弹窗
    if(!app.globalData.loginPermissions) {
        this.loginPopup.open();
    }else {
        //do something
    }
}

假如按照以上方式处理,会导致loginByCode登录接口返回缓慢时,进入b页面后,即使用户已经是登录的状态,但依然会弹出登录窗口。

对于上述问题,我们来改进一下代码

app.js

onLaunch() {
    loginByCode().then(resolve => {
        if (this.loginCallBack) {
            //这里的this 是指当前页面的this
            this.loginCallBack();
        }
    });
}
loginByCode() {
    return new Promise(resolve => {
        wx.request({
            url: \'https://xxx.com\',
            method: \'GET\',
            data: {},
            success: ({
                data,
                statusCode,
                header
            }) => {
                //接口返回结果后将登录状态置为true
                app.globalData.loginPermissions = true;
                resolve();
            }
        }) 
    });
}

页面b.js

onLoad() {
    //当进入此页面时,需要判断是否已登录用户,如果没有登录需要弹出登录弹窗
    if(app.globalData.loginPermissions && app.globalData.loginPermissions != \'\') {
      //do something
    }else {
      app.loginCallBack = () => {
        if (!app.globalData.loginPermissions) this.loginPopup.open();
        else this.loginPopup.close();
      }
    }
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap