小程序onLaunch执行异步,如何解决onLoad先执行的问题?

2018/10/1 18:34:29
摘要: 小程序开发时,按照事件顺序,小程序初始化触发APP的onlaunch后,在去是行页面Page的onload。但现实常常是,由于onlaunch

小程序开发时,按照事件顺序,小程序初始化触发APP的onlaunch后,在去是行页面Page的onload。但现实常常是,由于onlaunch里在请求获取是否有权限、等待返回值的时候,页面page里的onload事件已经执行了。那么,这个问题该如何去解决呢?小编get到一种方式,下面跟大家分享一下。

  要想实现等onLaunch请求完再执行Page的onLoad,其实可以采用定义一个回调函数的方法。Page页面要判断一下当前app.globalData.employId是否有值,没有的话,则定义一个app方法(回调函数)app.employIdCallback = employId => {...}。

而App页面在请求success后,去判断是否有Page页面定义的回调方法,如果有就执行该方法。另外,因为回调函数是在Page里面定义的,所以方法作用域this是指向Page页面。

下面我们看一下示例代码:

//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: ''

  }

})

 

//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

          });

        }

      }

    }

  }

})

这样,它的执行顺序就变成如下:

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


声明:文章"小程序onLaunch执行异步,如何解决onLoad先执行的问题?"为互诚科技—微信小程序开发公司的原创文章,转载请注明出处,谢谢合作!
标签:小程序干货
电话咨询:18011971195(黄先生)
在线留言:
微信扫码,关注我们
相关文章
  • 广州微信小程序定制开发时的注意事项

    广州地区现在开发微信小程序的企业商家越来越多,并且很多人会选择以定制的形式来开发,费用不高

  • 坐拥微信小程序,颠覆传统教育方式

    随着现代生活水平、消费习惯以及互联网的发展,传统的以线下场景为主的教育模式已经不太能适应这个现代社会的发展、不能完全符合人们的学习需求。所以,用传统方式来经营的教育行业急需要调整完善自身的发展方式,以此来融入到互联网的发展潮流当中。

  • 开发汽车行业微信小程序,打破汽车门店地域限制

    汽车行业中无论是汽车的售卖还是维修、保养等方面,都是比较低频的商业场景,且由于行业的一些价格、地域等限制,也让汽车行业的发展有了局限性。不过,由于互联网的发展,也出现了很多平台来争先恐后地想解决掉汽车行业的这种局限,微信小程序就是

  • 广州企业如何快速开发一款微信小程序

    微信小程序的开发虽然是轻量化产品的开发,有着“小”这个特点,开发难度也比较小,但是真正开发仍旧需要一定的时间。而如果一个企业,着急着想要看到小程序的开发成果,

  • 微信小程序开发教程之index 页面解析

    微信小程序的每一个页面都包含三个文件,分别是.js(处理逻辑),.wxml(描述页面内容),.wxss(配置页面样式),index 页面同样

  • 借力微信小程序开发,为传统行业拓展流量来源

    自从电商行业出现以来,传统行业就一直被改革。不过也正是因为电商行业所带来的冲击,才让传统行业不得不去反思自己的发展模式,寻求新的商业模式结合发展。而微信小程序的出现,就被很多传统行业从业人士所看好,因为它的服务场景更广,能发展