微信小程序接口请求数据后,通过函数重新计算值,并且循环赋值给数据,可以打印结果,但是setData无效,渲染不出通过计算赋值的数据,如下图,litpic字段数据不显示
其他字段渲染出来了吗,渲染代码呢
回调函数里打印一下看看
this.setData({
clist: mylist
}, () => {
console.log(this.data.clist);
});
【以下回答由 GPT 生成】
首先,问题出在异步操作上,因为异步操作不会阻塞主线程,所以在异步操作完成之前,setData方法已经执行完了,所以页面上无法渲染赋值后的数据。
解决方案如下:
function mygetDis(myloc1, keywords) {
return new Promise((resolve, reject) => {
// 计算并赋值操作
// ...
// 将计算后的结果作为参数传递给resolve
resolve(res);
});
}
wx.request({
url: '114/html',
data: {
// 请求参数
},
success: (res) => {
var mylist = res.data.data;
// 用于保存所有异步操作的Promise对象
var promises = [];
for (var i = 0; i < mylist.length; i++) {
let item = mylist[i];
// 将异步操作Promise化
let promise = mygetDis(myloc1, item.keywords)
.then(res => {
// 通过函数计算并循环赋值给litpic字段
item.litpic = res;
});
promises.push(promise);
}
// 使用Promise.all等待所有异步操作完成
Promise.all(promises)
.then(() => {
this.setData({
clist: mylist
});
console.log(this.data.clist);
});
}
});
通过以上优化,可以保证所有异步操作执行完成后再执行setData方法,确保计算赋值后的数据可以在页面上正确渲染出来。
【相关推荐】