小程序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(黄先生)
在线留言:
微信扫码,关注我们
相关文章
  • 微信小程序开发的热门类目有哪些

    微信小程序的开发类目在不断被放开,开发热度也呈上升趋势,越来越多的用户企业商家将目光看向小程序,去开发、去发展这个平台。不过小程序

  • 分享:微信小程序开发过程中,常用的功能代码总结

    开发者进行微信小程序开发的时候,有一些比较常用的功能代码是可以学习使用的,根据基础的功能代码进行小调小整,就能调整成自己想要的代码

  • 广州微信小程序,组合拳开发促进高效收银

    关于酒店、餐饮等行业的收银结账开发票工作,经常需要排队已经成为消费者的诟病。为了解决这个常存的麻烦,微信官方于6月29日在厦门的公开课里提出了微信小程序开发“组合拳”模式,

  • 专属定制开发微信小程序,促进企业移动营销建设

    目前,网络营销已经成为企业营销的主要模式,而随着智能手机的发展与广泛使用,移动化营销更是成为网络营销的重中之重。在微信这个社交平台上,随之出现的微信公众号、微信小程序等营销产品。

  • 微信小程序开发——企业品牌宣传推动力

    企业拥有自己的品牌,随之而来的工作就是进行宣传推广,而企业品牌策划实施的要点,主要就分为三个部分:方式创新、体验满意跟促进分享。这每一个方面都是树立品牌形象、提升品牌知名度的必要过程,依靠微信小程序开发区推动企业品牌宣传也必须如此。

  • 小程序后台新增运维中心查Bug与用户管理两不误

    还在烦恼小程序时不时出现Bug让人措手不及吗?还在担心小程序Bug会影响小程序的使用体验吗?还在纠结小程序开发出现Bug却不能及时发现吗?从今天开始,这些问题统统