Проблема, с которой вы сталкиваетесь с вашим кодом, связана с асинхронной природой вашего цикла, а не с его обработкой каким-либо образом. Есть много библиотек, парадигм и т. Д., Чтобы работать с этой проблемой, но это то, что вам нужно взять в свои руки, чтобы стать профессионалом javascript. Я постараюсь описать проблему, чтобы вы могли попытаться решить ее в контексте своего кода, а не показывать вам все эти подходы.
Сначала я опишу, что происходит, когда вы запускаете этот цикл - он запустит 6 запросов, но когда эти запросы возвращаются с ответными данными и с каким ответом зависит, какой запрос решать вам.
Когда ваш запрос запускается из цикла, вы вызываете свой асинхронный блок следующим образом: calculateDistance(origin,destination)
, который затем запускает функцию обратного вызова, когда запрос завершен, как ваш исходный цикл передается в функцию CalculateDistance, которая вызывает обратный вызов какой запрос идет с каким результатом? Это не так.
Глядя на существующий код, функция 'init ()', которая запускает цикл, должна по крайней мере передать индексную переменную i
в функцию calculateDistance(index,origin,distance)
, которая затем гипотетически даст вам возможность передать ее в функция обратного вызова, поэтому она может соответствовать результату. Вы можете иметь пустой массив с таким же размером, называемым results
, и в вашей функции обратного вызова, если вы передадите туда индексную переменную callback(response,status,index)
, вы можете установить результат с помощью results[index] = response
. Затем вам нужно будет отследить, когда все запросы выполнены, а затем отрендерить их.
Во всяком случае, это то, что здесь происходит, это асинхронная проблема. Там есть много прочтений, и это одна из сложных вещей в кодировании с использованием JavaScript. Javascript является однопоточным, поэтому важно понимать асинхронные парадигмы, я не буду описывать все это здесь.