微信小程序app.js的onLaunch中的异步请求执行完之后再执行Page的onLoad
时间: 2024-04-07 16:29:37 浏览: 253
微信小程序onLaunch异步,首页onLoad先执行?
微信小程序的 app.js 中的 onLaunch 生命周期无法直接等待异步请求执行完毕再执行 Page 的 onLoad 生命周期。但是可以通过 Promise 封装异步请求来解决这个问题。
具体实现方法如下:
1. 在 app.js 中的 onLaunch 生命周期中定义一个 Promise 对象。
2. 在 Promise 对象中执行异步请求,并在请求成功时 resolve。
3. 在 Promise 对象中捕获请求失败的异常,并在异常处理中 reject。
4. 在 Page 中的 onLoad 生命周期中使用 Promise.then() 方法来等待异步请求执行成功后再执行相关逻辑。
代码示例如下:
```
// app.js
App({
onLaunch: function () {
const promise = new Promise((resolve, reject) => {
wx.request({
url: 'http://example.com/api/data',
success: (res) => {
// 将获取到的数据保存到全局变量中
this.globalData.data = res.data;
resolve();
},
fail: (err) => {
reject(err);
}
})
});
// 将 Promise 对象保存到全局变量中
this.globalData.promise = promise;
},
globalData: {
data: null,
promise: null
}
})
// page.js
Page({
onLoad: function () {
// 等待 Promise 对象执行成功后执行相关逻辑
getApp().globalData.promise.then(() => {
const data = getApp().globalData.data;
// 使用获取到的数据执行相关逻辑
}).catch((err) => {
console.error('请求数据失败:', err);
});
}
})
```
在上述代码中,我们将异步请求封装为一个 Promise 对象,并将其保存到全局变量中。在 Page 的 onLoad 生命周期中,我们通过访问全局变量中的 Promise 对象来等待异步请求执行成功后再执行相关逻辑。
阅读全文