原因:在微信小程序中,success回调函数是异步执行的,也就是说当success函数执行时,getData的值可能还没有被更新。在这种情况下,有两种解决方法:
- 在success的第二个参数中传入一个回调函数确保数据已经被更新。
- 将异步操作封装成一个对象
第一种解决方法:
wx.request({
url: 'https://example.com/data',
success: function(res) {
// 获取到数据后更新到页面上
this.setData({
data: res.data
}, function() {
// 数据更新完成后再获取数据
var newData = this.data.data;
console.log(newData);
});
}
});
第二种解决方法:
// 封装一个获取数据的函数,返回一个Promise对象
function getData() {
return new Promise((resolve, reject) => {
wx.request({
url: 'https://example.com/data',
success: function(res) {
resolve(res.data);
},
fail: function(err) {
reject(err);
}
});
});
}
// 在页面中调用该函数,并在Promise的then方法中获取数据
getData().then((data) => {
// 更新数据到页面
this.setData({
data: data
});
// 在数据更新完成后再获取数据
var newData = this.data.data;
console.log(newData);
}).catch((err) => {
console.error(err);
});