关于微信小程序执行顺序问题

最近在研究微信小程序,由于本人没有js基础,所以对js里函数异步执行很是无力。我在app.js里的wx.login与后台交互了一下,但由于是网络请求,所以导致还没获取返回数据的时候就执行了index.js里的onloud,刚刚发现了模板代码里获取用户信息有这么一段,
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo

// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
貌似是解决这个问题的,但我不是看得太明白,希望有大佬能给我解决一下。

// app.js
....
doLogin() {
    if (!wx.getStorageSync("userid") && !wx.getStorageSync("token")) {
        // 登录
        wx.login({
            success: res => {
                //自己的后台
                http.post({
                    url: "/xxxxxx",
                        params: {
                        code: res.code
                    },
                    success: (data) => {
                        this.globalData.userInfo = data.userInfo
                        wx.setStorageSync("userid", data.userid);
                        wx.setStorageSync("token", data.token);
                    },
                    error: (data) => {
                    }
                })
            }
        })
    }
},
....
//这个方法就是,用个定时器,
afterLogin(that, call) {
    this.loading(that);//菊花图loading组件
    if (this.globalData.userInfo) {
        call()
    } else {
        var count = 0;
        var t = setInterval(() => {
        if (this.globalData.userInfo) {
            clearInterval(t)
            call();
        } else {
            if (count >= 300) { // 30s未成功则登录失败
                clearInterval(t)
                this.loading(that);//菊花图loading组件
                //提示框方法
                this.msg.showToast(that, "获取登录信息失败")
            }
            count++;
        }
        }, 100)
    }
},
....
//index.js
var app = getApp()
...
onLoad: function (options) {
    app.afterLogin(this, () => {
        //这里放,你要在登录后做的事
    })
},
...

这样能解决不?也是看别人的代码,就是用计时器setInterval每隔100毫秒执行一次,看看登录信息拿到没有,拿到了,在进行后续操作。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-04
可以在index.js里的onload执行微信登录,登录成功后再用回调函数或promise执行其他
相似回答