【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.

最近新搭建了个小程序项目,登录时报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.getUserProfile
	if(wx.getUserProfile){
		return new Promise((resolve, reject) => {
			wx.getUserProfile({
				lang: "zh_CN",
				desc: '用于完善会员资料',
				success: (res) => {
					resolve(res)
				}
                // 失败回调根据自己项目去设计
            })
        })
	}
	// wx.getUserInfo
	else{
		return new Promise((resolve, reject) => {
			wx.getUserInfo({
				provider: 'weixin',
				lang: "zh_CN",
				success: (res) => {
					resolve(res)
				}
                // 失败回调根据自己项目去设计
			})
		})
	}
}

你可能感兴趣的:(uni-app,小程序,小程序)