Почему возвращается promise pending?

const postValue = async (query) => {
    const url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address';
    const token = 'blablabla...';
    // let query = 'москва';
    
    const options = {
        method: 'POST',
        mode: 'cors',
        headers: {
            'Content-Type': 'application/json',
            Accept: 'application/json',
            Authorization: `Token ${token}`,
        },
        body: JSON.stringify({ query }),
    };
    
    return fetch(url, options)
        .then((response) => response.text())
        .then((result) => result)
        .catch((error) => console.log('error', error));
};

console.log('DATA', postValue('москва'));
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 2
dpablo_escobarr
@dpablo_escobarr
строку "return fetch(url, options)" замени на "return await fetch(url, options)"
Ответ написан
@wind-of
Советую перечитать о том, как работает асинхронность в JavaScript.
https://javascript.info/async-await

Вкратце, функция postValue асинхронная, и возвращает промис. Вы не дожидаетесь, пока он зарезолвится, отчего и такой результат.

Либо пишите:
postValue("москва").then((data) => console.log("data", data))


Либо дожидайтесь резолва:
const data = await postValue("москва")
console.log("DATA", data)


Если участок кода находится на top level, то учтите уровень поддержки top level await.

В случае, если поддержки недостаточно, оберните в async IIFE
(async () => {
  const data = await postValue("москва")
  console.log("DATA", data)
})()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы