在微信小程序中,onLaunch里面如果进行异步请求。如:token,userInfo等异步获取用户信息。如果页面需要等待拿到用户信息后再进行请求数据的操作,需要做一些处理。
可能引发的问题
页面级别的onShow和onLoad的异步拿不到onLaunch异步请求数据(如:token)。会直接以未登录的身份请求数据。
解决方案以及实现步骤
1.在app.js
App({
globalData: {
userInfo: wx.getStorageSync('userInfo'),
},
onLaunch() {
// 创建 Promise 并存储
this.launchPromise = new Promise((resolve) => {
// 执行所有初始化异步操作
wx.login({
success: (res) => {
// 执行其他异步操作...
wx.request({
url: 'https://xxxx/login',
success: (userRes) => {
this.globalData.userInfo = { userInfo: userRes.data } ;
wx.setStorageSync('userInfo',userRes.data)
resolve(this.globalData);
}
});
}
});
});
},
});
2.在页面中使用
page.js
const app = getApp();
Page({
async onLoad() {
// 等待 onLaunch 的异步完成
await app.launchPromise;
//....再去执行页面的相关逻辑
}
});
注意事项
不一定是最优质的解决方案,仅供参考
214

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



