Я помещаю ответ json в массив, но по какой-то причине журнал консоли для длины массива возвращается как 0, даже если в нем явно есть объект.
let dogPool = []; for (i=0; i<dogNumber; i++){ fetch('https://dog.ceo/api/breeds/image/random') .then(response => response.json()) .then(responseJSON => dogPool.push(responseJSON)) .catch(error => alert('error! danger!')); } console.log(dogPool); //shows object console.log(dogPool.length) // returns 0
консоль:
arrayAPI ran []0: {message: "https://images.dog.ceo/breeds/mastiff-english/2.jpg", status: "success"}1: {message: "https://images.dog.ceo/breeds/pembroke/n02113023_3474.jpg", status: "success"}2: {message: "https://images.dog.ceo/breeds/chihuahua/n02085620_326.jpg", status: "success"}length: 3__proto__: Array(0) //length 3, but proto array is 0? 0
Я сделал функцию асин c, а затем добавил ожидание в выборку
async function arrayAPI(){ console.log("arrayAPI ran"); let dogPool = []; for (i=0; i<dogNumber; i++){ await fetch('https://dog.ceo/api/breeds/image/random') .then(response => response.json()) .then(responseJSON => dogPool.push(responseJSON)) .catch(error => alert('error! danger!')); } console.log(dogPool); console.log("length of dogpool: " + dogPool.length);
Попробуйте это в конце кода:
setTimeout(function() {console.log(dogPool.length);},2000);