在使用微信登录时,通常会在调用wx.login获取code后再通过wx.getUserProfile获取iv和encryptedData(加密数据)一起发到后端进行登录验证
在实际使用中如果在wx.login方法调用后再调用再使用wx.getUserProfile会报错
官方解释:
也就是说不能在调用方法的回调中使用wx.getUserProfule()
解决方法:使用Promise.all()方法实现平级调用
Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个
Promise
实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise
的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。
简单点说就是会等到两个方法都回调成功该方法才会返回来值,返回值是一个数组。
上代码
封装wx.login和wx.getUserProfile两个接口

1 /**
2 * 使用promise封装用户信息接口
3 */
4 getUserInfo:function(){
5 return new Promise((resolve,reject) => {
6 wx.getUserProfile({
7 desc: '用户登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
8 success: (res) => {
9 resolve(res)
10 },
11 fail:(err) => {
12 reject(err)
13 }
14 })
15 })
16 },
17
18 /**
19 * 使用promise封装wx.login接口
20 */
21 getLogin:function(){
22 return new Promise((resolve,reject) => {
23 wx.login({
24 success (res) {
25 resolve(res)
26 },
27 fail: (err) => {
28 reject(err)
29 }
30 })
31 })
32 },
封装登录接口

1 /**
2 * 登录接口
3 */
4 login: function(){
5 let userRes = this.getUserInfo()
6 let loginRes = this.getLogin()
7 //使用promise.all()平级调用
8 Promise.all([userRes,loginRes])
9 .then((res) => {
10 console.log(res)
11 let param = {
12 code: res[1].code,
13 iv: res[0].iv,
14 encryptedData: res[0].encryptedData
15 }
16 let data = {
17 method: "post",
18 url: api.apiName.wxLogin,
19 params: param
20 }
21 request.request(data)
22 .then(res => {
23 wx.setStorageSync('token', res.data)
24 wx.setStorageSync('hasLogin', true)
25 //获取用户信息
26 let data = {
27 method: "get",
28 url: api.apiName.getUserInfo,
29 params: null
30 }
31 request.request(data)
32 .then(res2 => {
33 wx.hideLoading({})
34 wx.setStorageSync('userInfo', res2.data)
35 })
36 .catch(err => {
37 wx.hideLoading({})
38 console.log(err.msg)
39 })
40 setTimeout(function(){
41 wx.switchTab({
42 url: '/pages/index/index',
43 })
44 },1500)
45 })
46 .catch(err => {
47 console.log(err.msg)
48 })
49 })
50 }
分类:
Uni-app
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2020-11-04 mybatis where 中in的使用
2009-11-04 SQL :多条记录取最前面一条或根据条件任取N条。。。。。。
2008-11-04 delegate 与异步调用。。。。。。。。。。。
2008-11-04 下面的代码示例使用 BeginGetRequestStream 方法对流实例发出异步请求。