微信小程序使用Promise解决同一页面中wx.request先于wx.login执行的问题

最近在开发微信小程序的过程中遇到需要获取用户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) {
      	//进行页面跳转}

这样就解决了异步执行的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值