方法拆分优化并写出优化后的代码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 }); takeRecent(that.data.map) }).catch(err => { console.error(err); }); }
时间: 2024-02-13 12:59:57 浏览: 73
Node中的Http模块和Url模块的使用示例代码.zip
下面是对该方法进行拆分优化后的代码示例:
```
// 计算当前位置与地图上所有位置的距离
function calculateDistance(mapData, currentLocation) {
// 将地图数据分成多个小组,每组最多包含10个位置
const groups = groupMapData(mapData, 10);
// 对每个小组内的位置进行距离计算,使用高德地图的批量计算距离接口
const promises = groups.map(group => {
const origins = [currentLocation];
const destinations = group.map(item => `${item.longitude},${item.latitude}`);
return new Promise((resolve, reject) => {
myAmapFun.getBatchRoute({
origins: origins,
destinations: destinations,
success: function (data) {
const distances = data.result.elements.map(element => Math.round(element.distance / 100) / 10);
group.forEach((item, index) => {
item.distance = distances[index];
});
resolve();
},
fail: function (err) {
reject(err);
}
});
});
});
// 将每个小组内的距离信息合并到地图数据中,并更新界面显示
Promise.all(promises).then(() => {
takeRecent(mapData);
}).catch(err => {
console.error(err);
});
}
// 将地图数据按照一定的规则进行分组
function groupMapData(mapData, groupSize) {
const groups = [];
let currentGroup = [];
mapData.forEach(item => {
currentGroup.push(item);
if (currentGroup.length >= groupSize) {
groups.push(currentGroup);
currentGroup = [];
}
});
if (currentGroup.length > 0) {
groups.push(currentGroup);
}
return groups;
}
```
这个优化版本的代码将地图数据按照一定的规则进行分组,每组最多包含10个位置,并使用高德地图的批量计算距离接口一次性获取每个小组内的位置与当前位置的距离信息。计算完成后,将每个小组内的距离信息合并到地图数据中,并调用 takeRecent() 方法更新界面显示。这样可以大大提高计算效率,减少网络请求的次数。
阅读全文