//调用处
wx.getUserInfo({
success: async (res) => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res.userInfo)
}
await this.login(res.userInfo.nickName);
}
})
//login的方法
async login(nickName: string){
let tempThis = this;
let flag = 0;
return new Promise((resolve) =>
{
wx.login({
success: (res: any) => {
if (res.code) {
wx.request({
method: 'POST',
url: 'https://xxxxxxx',
data: {
name: nickName,
code: res.code
},
success: (request: any) => {
const res = request.data;
tempThis.globalData.token = res.token;
flag = 1;
resolve({ status: flag});
}
});
} else {
console.log('获取用户登录态失败!' + res.errMsg);
flag = 0;
resolve({ status: flag});
}
}
});
});
}
在开发者工具中没有报错,在真机中报错
async await 需要Promise对象,你只对login方法进行了实例化,login里的ajax并没有,小程序原生ajax返回的并不是Promise对象,把获取token的接口另外写成一个函数,封装成promise,然后在 await this.login(res.userInfo.nickName); 下面 加载 await this.getToken(); 试一试
把每个异步都抽离出来改写成promise,然后调用的时候都用同步调用。
反正我封装微信小程序的request跟login都是这样封装的,并没有发现出错。
你的login不是async
现在原生不支持吧,需要使用框架才可以
我看https://developers.weixin.qq.com/community/develop/doc/000e20fbbe08c0bac9684cf9756000?highLine=async说的像模像样的。
我是没用了,老老实实的.then了。