Привет. Допустим, что я хочу вывести какой-то блок на странице:
$('.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);
});
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть фотогалерея на facybox 3Нужно под каждым фото добавить блок, который содержит текст и ссылку
На форме есть hidden поля, когда использую excluded:[':disabled'] для того чтобы валидировался CKEDITOR, hidden поле не валидируетсяЕсли использовать excluded:[':disabled',...