Привет. Допустим, что я хочу вывести какой-то блок на странице:
$('.some-element').append(`
Привет, ${data.user_name}. Вы успешно зарегистрировались в системе. Ваш город определён, как ${getCityByCode(data.code)}`
);
Но дело в том, что в функции getTimeByCode() используется асинхронный ajax-запрос, например:
function getCityByCode(param) {
$.getJSON('/json/cities.json', function(json){
for(let i = 0; i < json.length; i++)
if(json[i].code == param)
return json[i].cityname;
})
}
А следственно, функция append() не будет ждать, пока выполнится функция getCityByCode(). Для этого нежно использовать Promise. Но как это правильно сделать? Как заставить append() дожидаться выполнения функции?
Все верно, append не будет ждать запроса, более того в вашей конструкции не получится вернуть cityname напрямую, как результат работы функции getCityByCode.
В данном случае можно использовать Promise, необходимо, чтобы функция getCityByCode возвращала объект Promise, в который нужно передавать асинхронную функцию, которая по завершении действия должна вызвать один из аргументов resolve или reject.
Должно получиться как-то так:
function getCityByCode(param) {
return new Promise(function(resolve, reject) {
$.getJSON('/json/cities.json', function(json) {
for (let city of json) {
if (city.code == param) {
resolve(city.cityname);
}
}
})
});
}
getCityByCode(data.code)
.then(function(cityName) {
$('.some-element').append(cityName);
});
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники