Как убедиться, что массив заполнен в Fetch API?

const userfetched =[];
fetch('https://jsonplaceholder.typicode.com/users').then(response=> response.json()).then(user=>userfetched.push(user));
console.info(userfetched)

здесь он выводит пустой массив.

но если я использую следующий код:

const userfetched =[];
fetch('https://jsonplaceholder.typicode.com/users').then(response=> response.json()).then(user=>console.info(user));
console.info('end')

он выводит конец затем значения массива.

Как мне дождаться заполнения ответа выборки и перебрать его?

выполнение кода за пределами then продолжается, внутри затем выполняется, когда обещание возвращается (асинхронно). вот почему у вас эта проблема

Panos K 22.05.2018 10:56

Как мне это исправить, извините, я новичок в js .. и не знаю, как это исправить. Просто пытаюсь учиться

Sarav 22.05.2018 10:57

ну, если вы хотите синхронизироваться с обещанием, тогда вам нужно будет console.info внутри второго. вот где решается обещание

Panos K 22.05.2018 10:59

Отправленные ответы работают, но не могут быть экспортированы. Я использовал переменную состояния для привязки данных к рендерингу. Спасибо всем

Sarav 22.05.2018 16:55
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
310
2

Ответы 2

Просто поместите console.info(userfetched) после того, как fetch prom выполняет разрешение и проанализирует json:

fetch('https://jsonplaceholder.typicode.com/users')
  .then(response => response.json())
  .then(user => { 
      console.info(user) 
      // and do whatever you wanna do here
  });

Это потому, что на него еще нет ответа. После того, как обещание выборки разрешено (сервер ответил) и он проанализирован на json, console.info может выполняться.

StackedQ 22.05.2018 10:58

Ах, мне нужно экспортировать после нажатия этих значений

Sarav 22.05.2018 10:58

взгляните на это

StackedQ 22.05.2018 11:08

Вызовите функцию callApi после завершения featch и отправьте ответ в массив и консольируйте результат.

его рабочий асинхронный переход на синхронизацию

const userfetched = [];
class App extends Component {

     async callApi() {
       var res = await fetch('https://jsonplaceholder.typicode.com/users')
       var result = await res.json()
       console.info(JSON.stringify(result))
     }

      componentDidMount() {
        this.callApi()
      }

   render{
        return( //do something.... )
   }
}

были ошибки компиляции, исправил и запустил .. все еще не работает. получил пустой массив

Sarav 22.05.2018 11:17

вы используете какую-либо функцию для вызова выборки?

Prabhu 22.05.2018 11:19

нет, все, что я дал в вопросе, является фактическим кодом, я использую

Sarav 22.05.2018 11:20

вы можете написать выборку внутри функции и вызвать это имя функции, где бы вы ни хотели this.callApi ()

Prabhu 22.05.2018 11:23

и используя async await для этой функции

Prabhu 22.05.2018 11:23

снова та же проблема :(

Sarav 22.05.2018 11:35

попробовал это: const getdata = async () => {const data = await fetch ('jsonplaceholder.typicode.com/users '); const result = ждать data.json (); console.info (JSON.stringify (результат)); }; получить данные(); console.info ('конец');

Sarav 22.05.2018 11:36

где вы вызывали функцию getdata внутри класса или вне класса?

Prabhu 22.05.2018 11:42

Класса нет. Это просто файл с одной функцией, которую вы порекомендовали, и я вызвал в этом файле

Sarav 22.05.2018 11:54

вы можете поместить код в консоль браузера const getdata1 = async () => {const data = await fetch ("jsonplaceholder.typicode.com/users "); const result = await data.json (); console.info (JSON.stringify (result)); }; getdata1 ()

Prabhu 22.05.2018 12:11

Позвольте нам продолжить обсуждение в чате.

Sarav 22.05.2018 12:25

работает при печати. Но не могу экспортировать ... Я изменил код, чтобы использовать переменную состояния, так что пока он работает

Sarav 22.05.2018 16:06

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