alexjet73
@alexjet73

Как ответ сервера через fetch вернуть в виде текста в переменную?

return fetch(ajaxurl, {
                 method: 'POST',
                 body: formData
             }).then(resp => resp.text());


возвращается все равно промис?!
Подскажите что тут не правильно, ведь text() возвратить должен ответ сервера в виде текста?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 3
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Подскажите что тут не правильно, ведь text() возвратить должен ответ сервера в виде текста?

Тут всё правильно. resp.text() как Вы заметили, тоже возвращает промис. А вот следующий then уже вернёт данные.
fetch(ajaxurl, {
  method: 'POST',
  body: formData
})
.then(resp => resp.text())
.then(data => alert(data))
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Сетевые запросы асинхронны по своей природе: выполняются непредсказуемо долго.

Попробуйте изменить общую логику приложения так, чтобы результат запроса, когда появится, не просто назначался в какую-то переменную, а вызывал колбэк с результатом.
function getIndex(adr) {
  // ...
  return fetch(ajaxurl, {
    method: 'POST',
    body: formData
  }).then(resp => resp.text())
    .then(showResult)
    // парашютики не забываем:
    .catch(err => console.error(err));
}

function showResult(data) {
  console.log(data);
}

getIndex('https://ya.ru/'); // вернёт промис, ну и фиг с ним


Либо поместите всю логику дальнейшей работы с результатом прямо в цепочку промисов:
function getIndex(adr) {
  // ...
  return fetch(ajaxurl, {
    method: 'POST',
    body: formData
  }).then(resp => resp.text())
    .then(showResult)
    .catch(err => console.error(err));
}

getIndex('https://ya.ru/')
  .then(data => {
    document.querySelector('#output').innerText = data;
  })
  .catch(err => console.error(err));
Ответ написан
Промис всегда возвращает промис
https://habr.com/ru/company/mailru/blog/269465/
Вариант 1) используй await ну тут зависит от того чего у тебя выше написано
https://developer.mozilla.org/en-US/docs/Web/JavaS...

Вариант 2) Переписать код выше, так чтобы он работал с Promise
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
XPOWER Одесса
от 3 000 до 5 500 $
Artezio Москва
от 160 000 до 220 000 ₽
26 февр. 2021, в 05:09
3000 руб./за проект
26 февр. 2021, в 04:16
3000 руб./за проект
26 февр. 2021, в 01:40
1000 руб./за проект