小程序中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
		}
	})
},

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
"getUserProfile:fail can only be invoked by user TAP gesture."的错误通常是因为在调用wx.getUserProfile方法没有通过用户点击手势触发。这意味着在调用getUserProfile方法之前,需要将其绑定到一个点击事件上,确保只有用户点击后才能调用该方法。 另外,有些情况下,如果在wx.login方法嵌套调用getUserProfile方法,也会导致这个错误的出现。所以需要确保在不同的间段内调用这两个方法,而不是同进行。 此外,有人提到使用async和await可能会出现这个错误。如果你在代码使用async和await,尝试将其去掉并使用其他方式来处理异步操作,看看是否还会出现相同的错误。 总结起来,解决这个错误的关键是确保在调用wx.getUserProfile方法,通过用户点击手势触发,并且避免在wx.login方法调用getUserProfile方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uni.getUserProfile报错:fail can only be invoked by user TAP gesture](https://blog.csdn.net/cwjxyp/article/details/122201261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【小程序】报getUserProfile:fail can only be invoked by user TAP gesture.](https://blog.csdn.net/qq_37451395/article/details/123579444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值