У объекта JavaScript есть данные в консоли, но нет данных в коде

Я работал с Github API и создал функцию, которая получает данные из проекта Github и возвращает их в JSON-формате, свернутом из

function drawProjects() {
    var GPD = getGPD('https://api.github.com/repos/frc5104/Power-Up- 2018/projects');
    console.log(GPD);
}

Это довольно странно, потому что "нормальный" объект JSON будет выглядеть как свернутый, развернутый из

function drawProjects() {
    var GPD = {
        tp: "ay!",
        test1: {
            key: "Hi"
        }
    };
    console.log(GPD);
}

Там JSON из функции не имеет данных в свернутом виде, хотя "нормальный" JSON делает.

Это было бы хорошо, допустим, я не могу получить доступ к чему-либо внутри объекта. Строковый объект возвращает "{}", вы не можете перебрать объект, вы не можете получить доступ к данным и т. Д.

Мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше или кто-нибудь знает решение этой проблемы.

Для справки, получить GPD выглядит так:

function getGPD(url) {
    var Gde = {};
    getGAPI(url, function (data) {
        for (var project in data) {
            //Each Project
            Gde[data[project].name] = {};
            getGAPIK(data[project].columns_url, function (data, pro) {
                for (var column in data) {
                    //Each Column
                    Gde[pro][data[column].name] = {};
                    getGAPIK(data[column].cards_url, function (data, col) {
                        for (var card in data) {
                            //Each Card
                            var cardNote = data[card].note;
                            var cardId = data[card].id;
                            Gde[pro][col][cardId] = { cardNote };
                        }
                    }, data[column].name);
                }
            }, data[project].name);
        }
    });
    return Gde;
}

function getGAPIK(url, func, keepIY) {
    $.ajax({
        url: url,
        type: 'GET',
        dataType: 'json',
        success: function (data) {
            func(data, keepIY);
        },
        error: function () { },
        beforeSend: setGHHeader
    });
}

function getGAPI(url, func) {
    $.ajax({
        url: url,
        type: 'GET',
        dataType: 'json',
        success: function (data) {
            func(data);
        },
        error: function () { },
        beforeSend: setGHHeader
    });
}

function setGHHeader(xhr) {
    xhr.setRequestHeader('Accept', 'application/vnd.github.inertia-preview+json');
    xhr.setRequestHeader('Authorization', 'token f29ec838673639aa53c5faa39cc8d0615a18be29');
}

---------------Обновить------------------
Мне удалось исправить это благодаря Берги, благодаря btw, заменив инструкцию return на функцию обратного вызова после того, как был сделан самый большой цикл for, поэтому:

function getGPD(url, func) {
var Gde = {};
getGAPI(url, function (data) {
    for (var project in data) {
        //Each Project
        Gde[data[project].name] = {};
        getGAPIK(data[project].columns_url, function (data, pro) {
            for (var column in data) {
                //Each Column
                Gde[pro][data[column].name] = {};
                getGAPIK(data[column].cards_url, function (data, col) {
                    for (var card in data) {
                        //Each Card
                        var cardNote = data[card].note;
                        var cardId = data[card].id;
                        Gde[pro][col][cardId] = { cardNote };
                    }
                }, data[column].name);
            }
        }, data[project].name);
    }
    func(Gde);
});
}

Это работает, потому что он возвращал значение, а затем обновлял это значение, а не просто отправлял значение напрямую.

0 ответов

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