关于微信小程序中异步登录的问题? 文件执行顺序的问题 与promise问题

目前我将登录操作写在了 app.js 中, 获取到微信的 code 后,向自己的服务器获取验证 access-token .

代码如下


app.js


    onLaunch: function () {

        wx.login({

            success: res => {

                // 发送 res.code 到后台换取 openId, sessionKey, unionId

                config.code = res.code;

                this.initUserInfo();

            }

        })

    },

    

    

    // 初始化用户信息

    initUserInfo: function () {

        wx.request({

            url: config.baseUrl + "/index.php?m=Api&c=User&a=initUserInfo",

            method: 'POST',

            header: {

                "Content-Type": "application/x-www-form-urlencoded"

            },

            data: {

                source_type: 'wxapp',

                code: config.code,

            },

            success: function (res) {

                if (res.data.status == true) {

                    

                    config.uid = res.data.data.uid;

                    config.accessToken = res.data.data.wxapp_access_token;

          

                } else if (res.data.status == false) {

                    console.log(res.data.data);

                } else {


                }

            }

        })

    },

在另一个文件 met.js 中需要通过获取的 uid accessToken 来请求获取数据.

代码如下

met.js


    eggGetRemoteWords: function() {


        var self = this;

        wx.request({

            url: app.config.baseUrl + "/index.php?m=Api&c=Learning&a=getLearningWord",

            method: 'POST',

            header: {

                "Content-Type": "application/x-www-form-urlencoded"

            },

            data: {

                uid: app.config.uid,

                access_token: app.config.accessToken

            },

            success: function (res) {

                if (res.data.status == true) {

                    self.setData({

                        'word.wordArray': res.data.data,

                    }) 


但是目前总是 met.js 中的函数 eggGetRemoteWords 总早于 app.j s中 initUserInfo 登录函数执行,导致无法获取到数据 因为 js 异步的原因. 请问大家这应该怎么处理呢? 我了解到 promise 请问如果目前的需求将如何实现呢?


幕布斯6054654
浏览 630回答 4
4回答

临摹微笑

用async函数调用,initUserInfo和eggGetRemoteWords都封装成promise

largeQ

用promise二次封装下你的request就行了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript