首先我们先了解一下小程序的加载顺序:
- 首先执行
App.onLaunch->App.onShow - 其次执行
Component.created->Component.attached - 再执行
Page.onLoad->Page.onShow - 最后 执行
Component.ready->Page.onReady
我们经常会遇到一种业务就是需要拿到客户的登陆token,才能执行后面其他的接口。那就会出现一种情况就是在onLaunch发起异步请求token,onLoad执行的异步接口因为没有及时拿到token,导致接口请求失败....
解决方案:
// app.js
App({
onLaunch: function (options) {
// 请求token接口
wx.request({
url: '/Mall/WxLogin', //仅为示例,并非真实的接口地址
header: {
'content-type': 'application/x-www-form-urlencoded',
'accept': 'application/json',
},
success(res) {
console.log('执页面回调方法========');
wx.setStorageSync('token', res.data.token);
this.globalData.wxLoginFlag = true; // 记录接口已经请求完
if (this.pageCallback) {
this.pageCallback(options.query);
}
}
});
})
}),
// 全局变量
globalData: {
wxLoginFlag: false, // wxlogin 接口是否请求
}
// test.js
const APP = getApp();
Page({
onLoad: function (options) {
if (!APP.globalData.wxLoginFlag) {
console.log('进入者wxlogin请求=========')
APP.pageCallback = (options) => {
this.pageCallback(options);
}
} else {
console.log('进入普通正常请求=========')
this.pageCallback(options);
}
},
// 页面回调方法
pageCallback(options) {
console.log("打印页面参数::", options);
// 编写页面的请求逻辑
// ....
},
})
~~ END ~~