Проблема, которую вы описываете, может возникать из-за асинхронной природы запросов к API. Когда вы используете координаты для выполнения запроса к API, чтобы получить информацию о городе, API обработает запрос и вернет данные через некоторое время. Пока вы не получили ответ от API, код продолжает исполняться, и переменная `city` может быть еще не обновлена новой информацией.
В вашем коде не видно места, где происходит фактический запрос к API, поэтому я приведу пример, как можно реализовать асинхронный запрос к API и обновить `selectedOption` после того, как данные будут получены.
Пример функции, которая осуществляет запрос к API и обновляет `selectedOption`:
```javascript
const handleSubmit = async (e) => {
e.preventDefault();
if (!formData || !formData.includes(',')) return;
const [latitude, longitude] = formData.split(/,\s*/);
// Функция для получения информации о городе по координатам
const getCityByCoordinates = async (lat, lng) => {
// url API, который возвращает информацию о местоположении
const apiURL = `https://api.example.com/geocode?lat=${lat}&lng=${lng}`;
try {
// Делаем асинхронный запрос к API
const response = await fetch(apiURL);
if (!response.ok) {
throw new Error('Network response was not ok');
}
// Парсим результат
const data = await response.json();
return data;
} catch (error) {
console.error('There has been a problem with your fetch operation:', error);
}
};
// Вызываем созданную функцию и ожидаем ее выполнения
const cityData = await getCityByCoordinates(latitude, longitude);
// После получения данных обновляем selectedOption
if (cityData && cityData.results && cityData.results[0] && cityData.results[0].components) {
changeSelectedOption({
"latitude": latitude,
"longitude": longitude,
"value": cityData.results[0].components.country,
"label": cityData.results[0].components.country
});
}
}
```
В данном случае функция `handleSubmit` является асинхронной (`async`), и мы ждем результат асинхронного вызова функции `getCityByCoordinates` с помощью оператора `await`. После получения ответа от API мы обновляем `selectedOption`.
Такой подход позволит вам устранить задержку, связанную с обновлением значения `value` и `label`, поскольку обновление произойдет непосредственно после получения данных от API.