Реализация Promise
Всем привет. Вопрос такой, начал изучать promise интуитивно понимаю как он работает, много примеров есть, но ни где, не мог найти пример, что бы в него(promise) предавали let. Подскажите кто знает, как поступать если у тебя в теле цикла есть let.Если предаешь в .then(let data = JSON.parse(request.response)) ругается что не хватает скобки, и конвертер валют не работает ;(((
let inputRub = document.getElementById('rub'),
inputUsd = document.getElementById('usd');
inputRub.addEventListener('input', () => {
function getMoney (){
return new Promise (function (resolve, reject) {
let request = new XMLHttpRequest();
request.open('GET', 'js/current.json');
request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
request.send();
request.addEventListener('readystatechange', function() {
if (request.readyState === 4 && request.status == 200) {
let data = JSON.parse(request.response);
resolve();
// inputUsd.value = inputRub.value / data.usd;
} else {
reject();
// inputUsd.value = "Что-то пошло не так!";
}
});
});
};
getMoney()
.then (()=> inputUsd.value = inputRub.value / data.usd)
.catch (()=> inputUsd.value = "Что-то пошло не так!")
});
Ответы (1 шт):
Автор решения: ThisMan
→ Ссылка
Раз используете promise, посмотрите в сторонуfetch. Он легче и из коробки использует promise
Пример, как пользоваться
fetch(url)
.then(data => data.json())
.then(data => { /** делаем что-то тут */ })
.catch(error => { /** ... */ });
Так же, если по какой-то причине fetch не подходит, вы можете передать в resolve какие-то данные, тогда они попадут в then
request.addEventListener('readystatechange', function() {
if (request.readyState === 4 && request.status == 200) {
let data = JSON.parse(request.response);
resolve(data); // передали data в resolve
} else {
reject();
}
});
// далее где-то в коде
getMoney()
.then ((data)=> inputUsd.value = inputRub.value / data.usd)
.catch (()=> inputUsd.value = "Что-то пошло не так!")