微信小程序使用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) {
      	//进行页面跳转}

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

你可能感兴趣的:(编程技巧)