最近新搭建了个小程序项目,登录时报getUserProfile:fail can only be invoked by user TAP gesture.这个错误。查了网上说的是使用了async和await,试着改了不用async和await,结果还是一样报这个错误。
我的代码是用户点击授权按钮后,先使用wx.login,接着后面使用wx.getUserProfile,在同一个方法里执行。试着将wx.login注释,结果wx.getUserProfile正常获取到结果。也就是说wx.login和wx.getUserProfile不能在同一时间去获取。
知道原因之后就好办了,将wx.login移到了授权组件的mounted方法,并将code保存
mounted(){wx.login({success:(res) => {this.code = res.code}})
},
点击授权按钮后还是使用了async/await去获取用户信息,兼容了getUserProfile和getUserInfo
actionLogin: async function(res) {// 原本在这里调用getWxCode的wx.login获取code的// const resCode = await this.getWxCode()const resUser = await this.getUserInfo()this.getOpenid(resUser) // 拿到了code和个人信息就可以调后端接口登录了
},// 适配新旧版本获取个人信息
getUserInfo: async function() {// wx.getUserProfileif(wx.getUserProfile){return new Promise((resolve, reject) => {wx.getUserProfile({lang: "zh_CN",desc: '用于完善会员资料',success: (res) => {resolve(res)}// 失败回调根据自己项目去设计})})}// wx.getUserInfoelse{return new Promise((resolve, reject) => {wx.getUserInfo({provider: 'weixin',lang: "zh_CN",success: (res) => {resolve(res)}// 失败回调根据自己项目去设计})})}
}