优化这个方法 calculateDistance(){ const that=this const mapVar=JSON.parse(JSON.stringify(that.data.map)) mapVar.forEach(item=>{ const origin=that.data.longitude+','+that.data.latitude const destination=item.longitude+','+item.latitude myAmapFun.getDrivingRoute({ origin: origin, destination: destination, success: function(data){ item.distance=Math.round(data.paths[0].distance/100)/10 }, }); }) that.setData({ map:mapVar }) console.log(this.data.map) console.log(Date()) }
时间: 2024-02-04 13:04:14 浏览: 74
这个方法中使用了异步操作,因此我们需要等所有异步操作完成后才能更新数据并显示结果。我们可以使用 Promise.all() 方法来等待所有异步操作完成后再更新数据。
下面是优化后的代码:
```javascript
calculateDistance() {
const that = this;
const mapVar = JSON.parse(JSON.stringify(that.data.map));
const promises = [];
mapVar.forEach(item => {
const origin = that.data.longitude + ',' + that.data.latitude;
const destination = item.longitude + ',' + item.latitude;
const promise = new Promise((resolve, reject) => {
myAmapFun.getDrivingRoute({
origin: origin,
destination: destination,
success: function(data) {
item.distance = Math.round(data.paths[0].distance / 100) / 10;
resolve();
},
fail: function(err) {
reject(err);
}
});
});
promises.push(promise);
});
Promise.all(promises).then(() => {
that.setData({
map: mapVar
});
console.log(that.data.map);
console.log(Date());
}).catch(err => {
console.error(err);
});
}
```
在上面的代码中,我们使用了 Promise.all() 方法来等待所有异步操作完成后再更新数据。具体来说,我们将所有异步操作的 Promise 对象存储在一个数组中,并使用 Promise.all() 方法来等待这些异步操作完成后执行回调函数。
在每个异步操作的回调函数中,我们使用 resolve() 方法来指示该异步操作已完成,并将返回的数据保存到 mapVar 数组中。在所有异步操作完成后,我们使用 setData() 方法来更新数据并显示结果。
另外,我们还使用了 Promise 的错误处理机制来处理异步操作失败的情况,并在 catch() 方法中输出错误信息。
总的来说,通过使用 Promise.all() 方法,我们可以更加优雅地处理异步操作,并使得代码更加简洁易懂。
阅读全文