【发布时间】:2025-12-04 01:25:01
【问题描述】:
请帮忙!我正在尝试使用 nodejs、axios 和 google maps api 进行批量反向地理编码操作。这是主要功能:
function reverse_geocode (data) {
console.log('Working...')
let records = []
chunks = chunkArray(data, 50) // Split data into chunks
chunks.forEach(chunk => {
records.push(process_chunk(chunk)) // Do the requests for each chunk then
// push into array the results
})
console.log(records)
}
我有一组 773 个 {lat, lng} 对象,我使用这个函数将它们分成 50 个元素的块:
function chunkArray(myArray, chunk_size){
var index = 0
var arrayLength = myArray.length
var tempArray = []
for (index = 0; index < arrayLength; index += chunk_size) {
myChunk = myArray.slice(index, index+chunk_size)
tempArray.push(myChunk)
}
return tempArray
}
接下来,我将每个块传递给使用 axios.all 发出请求的异步函数:
async function process_chunk(chunk){
const key = process.env.GOOGLE_MAPS_API_KEY
let promises = []
let chunk_records = []
chunk.forEach(element => {
query = `https://maps.googleapis.com/maps/api/geocode/json?`+
`latlng=${element.latitude},${element.longitude}&key=${key}`+
`&result_type=administrative_area_level_3`
promises.push(axios.get(query)
.catch(function(err){
console.log(err)
}))
})
let responses = await axios.all(promises)
.catch(function(err){
console.log(err)
})
console.log('Responses downloaded... Processing')
responses.forEach(function(response){
res_data = response.data['results'][0]
comune = res_data['address_components'][0]['long_name']
provincia = res_data['address_components'][1]['short_name']
lat = res_data['geometry']['location']['lat']
lng = res_data['geometry']['location']['lng']
chunk_records.push(
{
lat: lat,
lng: lng,
comune: comune,
provincia: provincia
}
)
})
return chunk_records
}
最终结果是记录有待处理的承诺,几秒钟后出现几个“套接字挂起”错误,代码为“ECONNRESET”:
Listening
Working...
[
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
]
Error: socket hang up
at connResetException (internal/errors.js:570:14)
at TLSSocket.socketOnEnd (_http_client.js:440:23)
at TLSSocket.emit (events.js:215:7)
at endReadableNT (_stream_readable.js:1184:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'ECONNRESET',
我做错了什么?还有其他方法可以做同样的事情吗?提前感谢您的任何建议!
【问题讨论】:
标签: node.js google-maps-api-3 axios