微信小程序onLaunch异步,首页onLoad先执行?

本来按照事件顺序,小程序初始化时触发App里的onLaunch,后面再执行页面Page里的onLoad,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。

 


  1. //app.js
    App({
    onLaunch: function () {
    console.log('onLaunch');
    wx.request({
    url: 'test.php', //仅为示例,并非真实的接口地址
    data: {
    },
    success: function(res) {
    console.log('onLaunch-request-success');
    // 将employId赋值给全局变量,提供给页面做判断
    this.globalData.employId = res.employId;
    }
    })
    },
    globalData: {
    employId: ''
    }
    })
    

  1. //index.js
    //获取应用实例
    const app = getApp()
    
    Page({
    data: {
    albumDisabled: true,
    bindDisabled: false
    },
    onLoad: function () {
    console.log('onLoad');
    console.log('onLoad app.globalData.employId = ' + app.globalData.employId);
    //判断是用户是否绑定了
    if (app.globalData.employId && app.globalData.employId != '') {
    this.setData({
    albumDisabled: false,
    bindDisabled: true
    });
    }
    })

控制台打印的结果是

 


  1. onLaunch
    onLoad
    onLoad app.globalData.employId =
    onLaunch-request-success

要是能等完onLaunch请求完再执行Page的onLoad方法那该多好。  这里采用的方法是定义一个回调函数。  Page页面判断一下当前app.globalData.employId是否有值,如果没有(第一次)则定义定义一个app方法(回调函数)app.employIdCallback = employId => {…}。  App页面在请求success后判断时候有Page页面定义的回调方法,如果有就执行该方法。因为回调函数是在Page里面定义的所以方法作用域this是指向Page页面。

 


  1. //app.js
    App({
    onLaunch: function () {
    wx.request({
    url: 'test.php', //仅为示例,并非真实的接口地址
    data: {
    },
    success: function(res) {
    this.globalData.employId = res.employId;
    //由于这里是网络请求,可能会在 Page.onLoad 之后才返回
    // 所以此处加入 callback 以防止这种情况
    if (this.employIdCallback){
    this.employIdCallback(res.employId);
    }
    }
    })
    },
    globalData: {
    employId: ''
    }
    })

 


  1. //index.js
    //获取应用实例
    const app = getApp()
    
    Page({
    data: {
    albumDisabled: true,
    bindDisabled: false
    },
    onLoad: function () {
    //判断是用户是否绑定了
    if (app.globalData.employId && app.globalData.employId != '') {
    this.setData({
    albumDisabled: false,
    bindDisabled: true
    });
    } else {
    // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
    // 所以此处加入 callback 以防止这种情况
    app.employIdCallback = employId => {
    if (employId != '') {
    this.setData({
    albumDisabled: false,
    bindDisabled: true
    });
    }
    }
    }
    }
    })

这样的话,就能实现想要的结果。执行顺序就是:

 


  1. [App] onLaunch -> [Page] onLoad -> [App] onLaunch sucess callback

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

【小程序源码网资源版权风险说明】:
本站为避免不必要的纷争,分享的所有资源中一切可能有版权风险的资源将全部转载自第三方网站或平台,站长只为大家提供相关资源的介绍和跳转引导。 因可能有疏忽大意,所以如有遗漏资源侵犯了您的合法权利,请联系站长删除。
【小程序源码网资源下载使用说明】:
本站所分享的一切QQ小程序源码,thinkphp整站源码,微信小程序源码,图文教程等资源仅供用户学习参考使用,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网毫无人看的介绍】:
本站又称Z站,原名贼娘网,开站于2018年,换过三任站长,目前站长是第四任站长,本站是一个主要分享免费开源小程序源码/网站源码/免费素材/教程资源的网站,主要小程序资源有用于学习的小程序源码,也有正版原创可商用的小程序源码,是一个公益博客型网站。
【小程序源码网原创源码版权申明】:
未经小程序源码网许可,任何人不得擅自使用本站原创首发源码进行商业行为(除本站VIP用户在期限内,版权无使用限制),否则将依法承担相应赔偿责任。
【小程序源码网转载文章版权申明】:
本站所转载的QQ小程序或微信小程序源码与其他资源仅供学习,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网站长最后的屁话】:
如有您认为本站有任何侵犯您合法权益的文章,或者您有什么疑问需求,欢迎联系站长QQ,站长24小时在线,备注公司名称和源码版权问题或者需要小程序定制开发等站长业务类型可急速处理,如果您只是交流小程序的一些开发问题或源码问题可以加入QQ群讨论,就不用加站长啦,对于白嫖党,QQ群才是处理问题的天堂,当然站长也欢迎大家骚扰~
小程序源码网 » 微信小程序onLaunch异步,首页onLoad先执行?
嘿,投喂下嘛!