微信小程序中wx.login和wx.getUserProfile的使用
在使用微信登录时,通常会在调用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: '../../index/index', 43 }) 44 },1500) 45 }) 46 .catch(err => { 47 console.log(err.msg) 48 }) 49 }) 50 }
over over
本文来自博客园,作者:EchoLv,转载请注明原文链接:https://www.cnblogs.com/lvdeyinBlog/p/15011255.html

浙公网安备 33010602011771号