Когда я 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.) Arr = []
1.) Начать цикл
2.) Инициировать обещание
3.) log arr
4.) петля заканчивается
5.) log arr
6.) В какой-то неопределенной точке в будущем, спустя несколько миллисекунд, ваши обещания разрешат по одному в то время, каждый из которых добавляет элемент в массив.
Попробуйте выполнить обещания в массиве и использовать
Promise.all(promiseArr).then(()=>{
console.log(arr)
})
Promise.all будет ждать, пока все обещания в массиве не закончатся перед выполнением, поэтому вы сможете зарегистрировать свой законченный массив.