评论
【必看】新手解决小程序解决App.js与index.js函数异步问题,随时调用globalData

【必看】新手解决小程序解决App.js与index.js函数异步问题,随时调用globalData

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

【必看】新手解决小程序解决App.js与index.js函数异步问题,随时调用globalData

我相信大家都曾遇到一个问题,小程序需要请求一个公共的数据例如基本配置,它只需要在小程序打开之后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刷新页面可以获取到数据

【必看】新手解决小程序解决App.js与index.js函数异步问题,随时调用globalData

请求也确实只请求了一次

【必看】新手解决小程序解决App.js与index.js函数异步问题,随时调用globalData

总结

ฅ(๑ ̀ㅅ ́๑)ฅ