一个人的记忆就是一座城市,时间腐蚀着一切建筑,把高楼和道路全部沙化。如果你不往前走,就会被沙子掩埋。所以我们泪流满面,步步回头,可是只能往前走

我相信大家都曾遇到一个问题,小程序需要请求一个公共的数据例如基本配置,它只需要在小程序打开之后app.js请求一次之后其他页面可以随时调用
而问题所在就是App.js与index.js函数异步问题,导致打开小程序他先执行index.js函数在走App.js,首页就无法及时获取需要的参数
特别感谢
codezen
案例
app.js
// 声明常量(解决异步)
const eventMap = new Map();
App({
async onLaunch() {//(解决异步)
// 请求数据
await this.getDatas();
},
globalData: {
count: 1,//定义Nuber(解决异步)
dataJson:[],//请求数据
},
// 事件订阅(解决异步)
on(action, event) {
if (eventMap && !eventMap.has(action)) {
eventMap.set(action, event);
}
},
//事件卸载(解决异步)
off(action) {
if (eventMap && eventMap.has(action)) {
eventMap.delete(action);
}
},
//事件触发(解决异步)
emit(action, arg) {
if (eventMap && eventMap.has(action)) {
eventMap.get(action) && eventMap.get(action)(arg);
}
},
//请求数据
getDatas() {
return new Promise((resolve, reject) => {
wx.request({
url: '你的请求地址',
success: (res) => {
this.globalData.dataJson = res.data;
// 定义Nuber(解决异步)
if (res.data) {
this.emit('dataJson', this.globalData.count++);
}
},
});
});
},
})
index.js
const app = getApp()
Page({
data: {
},
onLoad: function () {
//(解决异步)
app.on('dataJson', this.changeToken.bind(this));
this.setData({
//setData你需要的globalData数据
//正逻辑需要的函数
})
},
//(解决异步)
changeToken() {
console.log('dataJson解决异步', app.globalData.dataJson);
//setData你需要的globalData数据以及正逻辑需要的函数
},
})
我们可以直接在小程序index.js刷新页面可以获取到数据

请求也确实只请求了一次

总结
ฅ(๑ ̀ㅅ ́๑)ฅ