小程序异步登录解决方案
程序员文章站
2022-04-15 17:43:59
...
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;
},
pages>index.js>onLoad
const app = getApp()
app.userLogin().then((res)=>{
//数据请求成功之后的操作
//可以请求其他的数据了
},(error)=>{
console.log('数据请求失败:'+error)
})
上一篇: @JsonFormat与@DateTimeFormat注解的使用
下一篇: 跨域的几种解决方案