欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

小程序开发——解决用户登陆时发生onLaunch与onLoad异步的问题

程序员文章站 2022-07-03 09:52:13
...

在app.js的onLaunch中执行登录部分的代码时,由于异步,index页面中的onLoad已经开始执行。而此时onLaunch还没运行完呐,index获取不到登陆信息。怎么办?

一种方式是通过回调函数,我刚开始也是用的这个方法,但是这个方法有一定的缺陷(如果启动页中有多个组件需要判断登陆情况,就会产生多个异步回调,过程冗余),不建议采用。

我这里采用另一个方法:通过Object.defineProperty监听globalData中的uid值来实现。具体方法如下:

//app.js
App({
    globalData: {
      uid: 0
    },
    onLaunch: function () {
      const that=this;
      //模拟登陆流程,3秒后获取到uid。
      setTimeout(function () {
        that.globalData.uid = 100866
      }, 3000) 
    },
    // 监听uid属性
    watch: function (method) {
      var obj = this.globalData;
      Object.defineProperty(obj, "uid", {
        configurable: true,
        enumerable: true,
        set: function (value) {
          this._uid = value;
          method(value);
        },
        get: function () {
          return this._uid
        }
      })
    }
  })


//index.js
const app = getApp()
Page({
    onLoad: function() {
        console.log('登陆流程尚未完成,uid是:',app.globalData.uid)
        app.watch(function(uid){
          console.log("登陆流程已完成,新的uid是:",uid)
          console.log('登陆流程已完成,新的app.globalData.uid是:', app.globalData.uid)
        // 此处执行登陆后的业务
        // function(){}
        })
    }
})