微信小程序 index.js获取app.js异步请求的动态数据

对于 “index.js不能获取app.js异步请求的动态数据” 这个问题,本人也是郁闷了好几分钟。

解决方法是:getApp().wxFunction().then(res => { })

先展示一下开始错误的代码吧

app.js:

globalData: {
  test: 1,
},

onLaunch(options) {
  console.log("onLaunch");
  wx.request({
    url: 'https://www.xxx.com/api/xxx/xxx',
    method: 'POST',
    data: {
      test: 1
    },
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    success: res => {
      console.log("request");
      that.globalData.test = 2;
    }
  })
}

index.js:

onReady() {
  console.log("onReady")
  console.log(app.globalData.test);
},

打印结果:

此时在index.js中app.globalData.test的值是1,再看看打印的顺序,很明显wx.request的异步请求在最后,所以在index.js中并不能获取到动态数据。

 

接下来就是解决这个问题,这里我用的是Promise,再看看正确的代码

app.js

globalData: {
  test: 1
},

wxLogin() {
  let that = this;
  return new Promise((resolve, reject) => {
    wx.request({
      url: 'https://www.xxx.com/api/xxx/xxx',
      method: 'POST',
      data: {
        test: 1
      },
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      success: function () {
        that.globalData.test = 2;
      }
    })
  })
},

index.js:

onReady() {
  // 这里的app已被定义 const app = getApp();
  app.wxLogin().then(res => {
    console.log(app.globalData.test);
  });
},

这时,app.globalData.test的值是2。

 

你可能感兴趣的:(前端开发,···,微信小程序)