对于 “index.js不能获取app.js异步请求的动态数据” 这个问题,本人也是郁闷了好几分钟。
先展示一下开始错误的代码吧
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。