@didrux

Как получить данные из функции(метода) после выполнения промиса?

Доброго времени суток, есть такой код:

export default class SomeClass {

    setReservations() {
        const icalUrl = 'someUrlWithData'

        async function getIcalData() {
            return await fetch(`${icalUrl}`);
        }

        getIcalData().then(promise => promise.text()).then(response => console.log(response))
    }
    return response;
}


Мне нужно получить значение response как переменную, которую можно использовать в коде в дальнейшем.

Попытался записать response в заранее обьявленную переменную, но столкнулся с синхронным выполнением кода

export default class SomeClass {

    setReservations() {
        let myVariable = "";
        const icalUrl = 'someUrlWithData';

        async function getIcalData() {
            return await fetch(`${icalUrl}`);
        }

        getIcalData().then(promise => promise.text()).then(response => myVariable = response))
    }
    return myVariable;
}


Получается при вызове метода setReservations() я получаю пустую строку, так как код выполняется синхронно, а присваивание значения response переменной myVariable происходит позже.

Как, вызывая метод класса, получить благодаря return результат выполнения промиса?
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
export default class SomeClass {
    async setReservations() {
        const icalUrl = 'someUrlWithData';
        const response = await fetch(icalUrl);
        const text = await response.text();
        return text;
    }
}

И вызывать метод через await.
const foo = new SomeClass();
const data = await foo.setReservations();
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Решите сначала упрощенную изолированную проблему (для себя)
function getValue() {
  return new Promise(resolve => setTimeout(() => resolve(123), 2000))
    .then(data => data * 2);
}
Как вы получите значение 246 из этой функции «в переменную»?

Когда разберётесь, скорее всего, разрешится и весь прочий «порочный круг асинхронности».
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы