小程序中getUserProfile使用async和await时fail,提示:can only be invoked by user TAP gesture

在getUserProfile接口中,使用async和await

事情是这样的:
最近在做的一个小程序项目登录功能,需要获取到用户的信息,然后调用wx.login,获取code一同发送到后端;就想着将wx.login封装成一个方法,然后用async和await,来获取到wx.login异步返回的值;
方法封装好了,但是在调用getUserProfile的时候出现了错误:can only be invoked by user TAP gesture

Are you kidding me????????
我不是在用户点击手势中触发的吗?
于是去打印了事件对象?发现type确实是tap啊。。。。。。没毛病啊???但是为什么报了这个错?
click应该是没有问题的,经过排查之后发现。。。也许是async和await照成的。。于是去官方的文档中找了一找。。。。果不其然,找到了关于这样的一段话(怪我当初没仔细看。。。)
着这里
这是修改前的代码

async getUserInfo(e){ // 获取用户信息
	let code = await this.login() // wx.login
	uni.getUserProfile({
		desc: '用于信息的更新或注册',
		lang:"zh_CN"success:(res)=>{
		},
		fail:(err)=>{
			console.log(err) // can only be invoked by user TAP gesture
		}
	})
},

上面这段就报了上面错的错误
下面这是修改了之后的代码,这样就行了,这种是Promise方式调用的

async getUserInfo(e){ // 获取用户信息
	uni.getUserProfile({
		desc: '用于会员信息的更新或注册',
		lang:"zh_CN"
	}).then(async (res) => {
		res = res[1]
		let data = {
			code:await this.login()
		}
	})
},

用他原本的方式调用应该要写成这样

async getUserInfo(e){ // 获取用户信息
	await this.login() // wx.login
	uni.getUserProfile({
		desc: '用于信息的更新或注册',
		lang:"zh_CN"success:async (res)=>{
			let data = {
				code:await this.login()
			}
		},
		fail:(err)=>{
			console.log(err) // can only be invoked by user TAP gesture
		}
	})
},

就单纯的记录一下。。。希望自己以后不要这么蠢了= _ = !!!


版权声明:本文为qq_45233592原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。