即使存在数据也要获取空数组。
作为响应的空数组,请帮助我。
sql.query("SELECT id, latitude, longitude from businesses", (err, data) => {
if (err) {
result(err, null)
} else {
// result(null, data)
let distanceArray = []
let c = 0;
var disDataOf = [];
_.map(data, (d) => {
c++;
// console.log("c-------------", c)
let distanceData = getDistanceFromLatLonInKm(d.latitude, d.longitude, lat, long);
// console.log("disatace--------", distanceData, range)
if (distanceData < range || distanceData == range) {
Business.getBusinessListingById(d.id, (err, finalBusinessData) => {
if (err) {
result(err, null)
} else {
disData = finalBusinessData[0]
console.log("dis--------", disData)
disData.distance = distanceData
distanceArray.push(disData)
console.log("array====================", distanceArray)
// console.log("c-------------", c)
// if (c == data.length-1) {
// result(null, distanceArray)
// }
}
})
}
},
result(null, distanceArray)
)
// result(null, distanceArray)
}
})
没有错误,只有空数组
答案 0 :(得分:0)
这是您的代码在运行_.map
并遇到getBusinessListingById
异步方法但在实际完成异步请求之前返回结果的常绿问题。
您需要将内部部分设为Promise
,并将其压入数组并使用Promise.all
执行。最佳情况下,您应该使用async-await
sql.query("SELECT id, latitude, longitude from businesses", (err, data) => {
if (err) {
result(err, null)
} else {
// result(null, data)
let distanceArray = []
var disDataOf = [];
const promises = [];
_.forEach(data, (d) => {
// console.log("c-------------", c)
let distanceData = getDistanceFromLatLonInKm(d.latitude, d.longitude, lat, long);
// console.log("disatace--------", distanceData, range)
if (distanceData < range || distanceData == range) {
promises.push(Business.getBusinessListingById(d.id));
}
})
Promise.all(promises)
.then((arr) => {
result(null, arr);
})
.catch((err) => {
result(err)
})
// result(null, distanceArray)
}
})
请参阅我最近写的this blog post只是因为这类问题的频率。