Fetch возвращает undefined при импорте

У меня есть функция, которая извлекает данные из URL-адреса и должна их возвращать:

const fetchTableData = () => {
fetch('https://api.myjson.com/bins/15psn9')
    .then(result => result.json())
    .then(data => {
        return data;
    })
}

export default fetchTableData;

Проблема в том, что когда я импортирую эту функцию и пытаюсь ее использовать, она всегда возвращает undefined.

Когда я консоль регистрирую данные внутри самой функции, вы можете видеть, что они доступны. Функция просто не работает, когда я пытаюсь ее импортировать.

В чем проблема? Почему так работает?

Вы должны добавить код, в котором вы его реализовали

Just code 21.11.2018 13:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
1
8 653
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуйте это =) Вы также должны вернуть что-то из функции fetchTableData.

const fetchTableData = () => {
  const fetchedData = fetch('https://api.myjson.com/bins/15psn9')
    .then(result => result.json())
    .then(data => {
        return data;
    })

    return fetchedData;
}

export default fetchTableData;

Или вы можете просто вернуть его вот так:

const fetchTableData = () => {
      return fetch('https://api.myjson.com/bins/15psn9')
        .then(result => result.json())
        .then(data => {
            return data;
        })
    }

    export default fetchTableData;

Замечательно, работает как шарм. Спасибо! Не могли бы вы добавить напоминание о том, что таким образом fetchTableData() возвращает обещание и к его данным необходимо получить доступ с помощью другого then? Это сэкономило бы пару минут другим новичкам, вроде меня, которые задаются этим вопросом.

shakhbulatgaz 21.11.2018 13:58

componentDidMount () {const data = fetch ("локальный: 4000 / профиль / адрес ") .then ((res) => {res = res.json ();}) .then ((res) => {return res;}); console.info ( data);} На консоли отображается: Promise {<pending>} прото: Promise [[PromiseState]]: «выполнено» [[PromiseResult]]: undefined, пожалуйста, помогите, заранее спасибо

Naman Dutta 01.04.2021 13:58

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

//First way
fetch('https://api.myjson.com/bins/15psn9')
    .then(result => result.json())
    .then(data => {
        console.info("data",data);
    });
    
//Second way
let binData = null;

fetch('https://api.myjson.com/bins/15psn9')
    .then(result => result.json())
    .then(data => {
        binData = data;
        console.info("binData", binData);
    });
    

Вот рабочий пример.

В вашем коде вы не возвращались из функции fetchTableData. Только из второго обратного вызова then(). Если функция не имеет возвращаемого значения, возвращается undefined.

Попробуйте вместо этого:

const fetchTableData = () => {
const myResponse = fetch('https://api.myjson.com/bins/15psn9')
    .then(result => result.json())
    .then(data => {
        return data;
    })
return myResponse;
}

export default fetchTableData;

Теперь происходит следующее:

  1. Ответ, возвращаемый второй функцией then(), возвращает данные.
  2. Мы сохраняем эти данные в переменной с именем myResponse.
  3. Теперь мы возвращаем это значение из функции fetchTableData.

Другие вопросы по теме