在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
}
})
},
就单纯的记录一下。。。希望自己以后不要这么蠢了= _ = !!!