欢迎光临
我们一直在努力

通过Promise解决onLaunch与onload异步同步问题

有时候我们一找开小程序就要获取用户信息,我们一般会把获取用户信息的代码写在app的onLaunch方法中,然后把获取的token保存起来,共其它页面使用。

因为获取用户信息时我们是异步获取的。就导致app.js中 onLaunch 还没有执行完就去执行page页面的onload,导致用户数据无法加载。

之前我能过中间加入启动页解决了此问题,今天我们讲一下能过 Promise来解决。不过 Promise 理解起来有点难,我个人还是喜欢启动页解决

直接上相关代码吧

//app.js
App({
    onLaunch: function() {
     //这里不写东西了
    },
    userLogin: function() {
        var that = this;
        //定义promise方法
        return new Promise(function(resolve, reject) {
            // that.getUserLocation(that,null);
            /*调用login获取code */
            wx.login({
                success(res) {
                    //通过code获取opeid
                    //我们用一个setTimeout代替wx.request的请求
                    setTimeout(function() {
                        //异步获取open_id了
                        wx.setStorageSync('open_id', "这是openid");
                        resolve(res);
                    }, 3000);
                },
                fail: function() {
                    reject();
                }
            });
        });

    },
    globalData: {
        userInfo: null
    }
})

page页面代码

// pages/page1/page1.js
const app = getApp()
Page({
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function(options) {
        app.userLogin().then(res => {
            console.log('sucess');
            console.log(wx.getStorageSync('open_id'))
        });
    },

})
赞(0)
未经允许不得转载:自游互动 » 通过Promise解决onLaunch与onload异步同步问题
分享到: 更多 (0)

自由技术,自由自在

项目合作联系我们