最近在开发微信小程序的过程中遇到需要获取用户openid来解决用户登录的问题。初步想法是在小程序载入的欢迎页面中先进行获取openid再向后台发送数据判断该用户是否已经绑定
初步设计
index.js
wx.login({
success: function (loginCode) {
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + that.globalData.appid + '&secret=' + that.globalData.secret + '&js_code=' + loginCode.code + '&grant_type=authorization_code',
header: {
'content-type': 'application/json'
},
success: function (res) {
that.globalData.op = res.data.openid;
}
})
}
})
wx.request({
url: '你的url',
data: {
opid: openid
},
method: 'post',
success: function (res) {
//进行页面跳转
}
遇到的问题
结果是程序执行起来先执行了后边的wx.request,又跳回去执行了wx.login,获取不到用户的openid,后台判断该用户没有注册
解决措施
引入了小程序的Promise,将获取openid放到了app.js中执行,利用resolve将执行结果传给index.js
app.js
getOpenID: function () {
var that = this;
return new Promise(function (resolve, reject) {
wx.login({
success: function (loginCode) {
wx.request({
//内容同上
success: function (res) {
//添加片段
resolve(res.data.openid);
}
})
}
})
})
}
index.js
app.getOpenID().then(function(openid){
wx.request({
url: '你的url',
data: {
opid: openid
},
method: 'post',
success: function (res) {
//进行页面跳转}
这样就解决了异步执行的问题