ссылка с кодом
const callBack = () => {
let inputRub = document.getElementById('rub'),
inputUsd = document.getElementById('usd');
inputRub.addEventListener('input', () => {
const promise = (url) => {
return new Promise((resolve, reject) => {
let request = new XMLHttpRequest();
request.open('GET', url);
request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
request.addEventListener('readystatechange', function() {
if (this.readyState === 4 && this.status == 200) {
resolve(this.response);
}
else {
reject();
}
});
request.send();
});
};
promise('js/current.json')
.then((response) => {
let data = JSON.parse(response);
inputUsd.value = (inputRub.value / data.usd).toFixed(3);
})
.catch((error) => {
inputUsd.value = "Что-то пошло не так!";
});
});
};
callBack();
этот конвертер должен брать значение с current.json такого содержания
{
"usd": 68
}
и переводить, но при запросе получается код 304 и промис переходит в reject.
Я только начал изучать промисы и не могу понять, где я допустил ошибку
ошибка заключается в неверной реализации обработчика .addEventListener('readystatechange'
В процессе выполнения запроса статус и readyState меняется несколько раз. В текущем же коде:
if (this.readyState === 4 && this.status == 200) {
resolve(this.response);
}
else {
reject();
}
Promise переходит в состояние rejected
при первом же заходе, если readyState не равен 4.
Для решения достаточно перенести проверку условия внутрь:
if (this.readyState === 4) {
if (this.status == 200) {
resolve(this.response);
}
else {
reject();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Постигаю азы использования ServiceWorker и Push API - есть такой код:
Я пробую делать русско-португальский словарь с помощью виджета AccordionКаждая словарная статья в своём ящике, которая откроется по щелчку
Текст задачи: You probably know the "like" system from Facebook and other pagesPeople can "like" blog posts, pictures or other items