在一个循环中 调用腾讯地图API 计算当前位置与不同终点的距离,开始我是这样写的
$req.request('GET', '/mcn/search', data, wx.getStorageSync('userType').token)
.then((res) => {
let array = that.data.productList
array = res.data.data
for (let i = 0; i < array.length; i++) {
let to = `${array[i].lat},${array[i].lng}`
let from = `${wx.getStorageSync('address').lat},${wx.getStorageSync('address').lng}`
array[i].tags = array[i].tags.slice(0, 2)
//计算当前位置与终点位置距离
//这个是封装的一个腾旭地图计算距离的方法 是个异步方法
util.calculateDistance(from, to, (res) => {
array[i].distance = res
})
console.log(array[i].distance)
}
//升序排序
array.sort((a,b) => {
return a.distance - b.distance
})
that.setData({
page: res.data.current_page,
current_page: res.data.current_page,
productList:array
})
})
.catch(err => {
console.log(err)
Toast(err)
})
在排序时不能点出对象属性 distance 去看了腾讯API 的源码,发现他是异步请求的
改为后面这种 使用 async await
_getMcnList(){
$req.request('GET', '/mcn/search', data, wx.getStorageSync('userType').token)
.then(async(res) => {
let array = that.data.productList
array = res.data.data
for (let i = 0; i < array.length; i++) {
let to = `${array[i].lat},${array[i].lng}`
let from = `${wx.getStorageSync('address').lat},${wx.getStorageSync('address').lng}`
array[i].tags = array[i].tags.slice(0, 2)
//计算当前位置与终点位置距离
await that.parom(from,to).then(res => {
array[i].distance = res
})
}
//升序排序
array.sort((a,b) => {
return a.distance - b.distance
})
that.setData({
page: res.data.current_page,
current_page: res.data.current_page,
productList:array
})
})
.catch(err => {
console.log(err)
Toast(err)
})
}
parom(from, to) {
return new Promise(resolve => {
util.calculateDistance(from, to, (res) => {
resolve(res)
})
})
},
这就解决了