Не определяет свойство объекта в цикле, в чем причина?
Сделал системку которая определяет город, переносит его в транслит и передается как свойство объекта для вывода данных. В Моем случае это город, и его режим работы.
Проблема связана с тем что свойство не может определится в цикле, при загрузке дума.
В чем может быть проблема?
Если вызвать через консоль, то все работает)
Код: тык
В вашем коде используется глобальная переменная tow, которая на момент вызова getDistr() пуста, она ещё не успевает заполнится данными от вызова API Яндекс.Карт.
Вообще глобальные переменные лучше не использоваться, а передавать tow непосредственно в getDistr(tow) в качестве аргумента, и не в самом начале работы скрипта, а после получения ответа от API (в блоке then).
Но я проверил с помощью console.log что именно возвращает вызов в API Яндекс.Карт - он возвращает пустую строку. Так что в этом скрипте ещё нужно внимательно разобраться, как работать с API Яндекс.Карт.
ymaps.ready(init);
function init() {
ymaps.geolocation.get({
provider: 'yandex',
autoReverseGeocode: true
}).then(function (result) {
tow = (result.geoObjects.get(0).properties.get('metaDataProperty.GeocoderMetaData.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName'));
});
};
В переменную tow передается строка города которая определила API Яндекс.Карт.
Я правильно понимаю что в переменную tow не успевает записаться строка, из-за чего цикл ломается? Если это так, то как сделать синхронное выполнение кода? Или точнее как ловить такие моменты и фиксить?
Просто в моем понимании нужно сначала объявить а потом присвоить, значит я не правильно думал)
ymaps.ready(init);
function init() {
ymaps.geolocation.get({
provider: 'yandex',
autoReverseGeocode: true
}).then(function (result) {
const tow = (result.geoObjects.get(0).properties.get('metaDataProperty.GeocoderMetaData.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName'));
// Получили tow и только после этого вызываем getDistr, явно передавая tow
getDistr(tow)
});
};