Пожалуйста, помогите! Я пытаюсь выполнить пакетную операцию обратного геокодирования, используя nodejs, ax ios и API Google Maps. Это основная функция:
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
}
Далее, Я передаю каждый кусок функции asyn c, которая выполняет запросы с использованием ax ios .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',
Что я делаю не так? Есть ли другие способы сделать то же самое? Заранее спасибо за любые предложения!