场景
在使用微信登录时,通常会在调用 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 两个接口:
/**
* 使用promise封装用户信息接口
*/
getUserInfo:function(){
return new Promise((resolve,reject) => {
wx.getUserProfile({
desc: '用户登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {


5716

被折叠的 条评论
为什么被折叠?



