wx.login()
小程序上面获取openid必须通过前端wx.login()方法来获取code,后台通过前端传递过来的code向微信请求以获取openid、session_key等关键信息,后端也可以通过code来进行用户登录业务开发,
wx.login()异步请求
在平常的登录开发中,一般都是把登录封装到app.js中的onLaunch中(登录开发方式不唯一),用户每次冷打开都会进行用户登录,在登录之后我们也会进行一些业务的开发和数据请求,如果按照事件执行顺序,小程序在初始化时触发app.js里的onLaunch方法之后,才应该执行Pages文件下的onLoad方法,但是wx.login()获取code请求的时候是异步数据请求,所以在请求wx.login()方法还未结束的时候,Pages文件下的onLoad就已经执行了,这个异步所带来的后果就是第一次数据请求,Pages文件下的onLoad下面的执行速度会一直大于app.js里的onLaunch执行速度。
暂行解决办法
既然已经知道执行的先后顺序是因为异步请求的结果,那么可以通过ES6中提供的Promise方法来进行处理,听过回调函数来进行其他页面的请求。
code
目录为根目录下的-app.js
userLogin:function(){ let that = this; let promise = new Promise((resolve, reject)={ wx.login({ success: function (res) { wx.request({ url: '服务器地址', dataType: "json", data: '要传递的参数code', method: method, header: {'Content-Type': 'application/x-www-form-urlencoded'}, success: function (res) { resolve(res); }, }) }, fail(error) { reject(error) } }) }) return promise; },pagesindex.jsonLoad
const app = getApp()app.userLogin().then((res)={ //数据请求成功之后的操作 //可以请求其他的数据了},(error)={ console.log('数据请求失败:'+error)})













