小程序加加载数据时,个别数据需要用户授权登录才能获得,比如,会员中心,用户订单等,但有些特殊情况下,打开小程序登录一次后,小程序缓存的登录数据sessiontoken已要失效,重新请求数据为空,因此这里需要写一个回调函数验证是否有效登录,验证通过回调加载数据,验证不通过从新登录理回调加载数据。
以下是微信小程序得到code,发送给后台服务器,后台服务器用code来得到openid及相关信息

userlogin:function(e,cb){ wx.login({ success: function (res) { var code = res.code;//发送给服务器的code var nick=''; var avatarUrl=''; if (code) { wx.request({ url: common.httpsurl +'/cus/appxq', data: { code: code, nick: nick, avatarUrl: avatarUrl, tjopenid:common.wuser.tjopenid }, header: { 'content-type': 'application/json' }, method: 'GET', success: function (res) { console.log(res.data); common.wuser.openid = res.data.openid; common.wuser.sessionkey = res.data.session; common.wuser.lg = res.data.lg; typeof cb == "function" && cb(); }, fail: function (res) { wx.navigateTo({ url: '/pages/index/index' }); } }) } else { console.log("获取用户登录态失败!"); wx.navigateTo({ url: '/pages/index/index' }); } }, fail: function (error) { console.log("login:error"); } });}
第二个回调检查登录sessiontoken是否有效,无效时重新login
checklogin:function(e,cb) { var that = this; request.req('app/userinfo', { sessionKey: common.wuser.sessionkey }, (err, res) => { if (res.data.login) { that.userlogin(e,function(){ typeof cb == "function" && cb() }) } else { common.wuser.phone=res.data.phone; common.wuser.realname=res.data.realname; typeof cb == "function" && cb() } }) }
回调函数中的cb为回调部分,等扩行完毕后会回调cb所对应的操作代码。回网络请求并非同步执行,所以部分请求要定会回调才行。