Длина массива возвращает ноль - PullRequest
1 голос
/ 09 февраля 2020

Я помещаю ответ 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

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Я сделал функцию асин 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);
0 голосов
/ 10 февраля 2020

Попробуйте это в конце кода:

setTimeout(function() {console.log(dogPool.length);},2000);
...