Вставка элемента в массив с помощью обещаний

1

Когда я console.log мой массив, он остается пустым, поэтому я не могу вытолкнуть элемент в массив с помощью моего кода. Я могу сделать это за пределами функции, но не знаю, что я делаю неправильно здесь с обещаниями. Я новичок в обещаниях. Спасибо за любые советы:

function fetchApiData(num) {
 let arr = []; 

for(let i = 0; i < num; i++) {
  fetch('https://dog.ceo/api/breeds/image/random')
  .then(response => response.json())
  .then(responseJson => console.log(responseJson.message))
  .then(responseJson => arr.push(responseJson.message));
  console.log(arr);
  }
  console.log(arr);  
  // how do I change console.log to push value into an array? 
}
  • 0
    Какая у вас проблема? Элементы не будут помещены в массив, пока эти выборки не будут разрешены. Вам нужно подождать, пока они закончат, прежде чем проверять массив
Теги:
arrays

1 ответ

5

Ваша проблема - это порядок разрешения. А именно, когда ваш код выполняется, вот что происходит:

0.) Arr = []

1.) Начать цикл

2.) Инициировать обещание

3.) log arr

4.) петля заканчивается

5.) log arr

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

Попробуйте выполнить обещания в массиве и использовать

Promise.all(promiseArr).then(()=>{
    console.log(arr)
})

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню