Pavell18RUS
@Pavell18RUS

Почему при вызове функции она ничего не отдает?

Функция
function getTrack(id) {
    var getParams = {
        audios: id,
        access_token: '***'
    };

    $.getJSON('https://api.vk.com/method/audio.getById', getParams, function (json) {
        if (json.error !== undefined) {
            var errorCode = json.error.error_code;

            if (errorCode == 14) {
                console.log('Captcha!');
            } else if (errorCode == 6) {
                console.log('Too many requests! Try again.');
                return getTrack(id);
            }
        } else {
            console.log(json.response['0']);
            return json.response['0'];
        }
    });
}

Инициализация
$(function () {
    $('.play , .download').click(function () {
        var trackItem = $(this).parent('.track'),
            trackId = trackItem.attr('data-id');

        if (trackItem.attr('data-url') !== undefined) {

        } else {
            console.log(getTrack(trackId));
        }
    });
});

Итог
1db5a1cd39f642c0bfa41815da54abce.png
Первый лог это лог вызова функции, второй лог это лог перед отправкой return в функции.
Уже 2 часа туплю и не могу понять в чем проблема.
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
@void01
это return функции getjson а не твоей gettrack добавь return перед $.getJson
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
werty1001
@werty1001
undefined
Потому что getJSON работает асинхронно, поэтому функция и undefined

function getTrack(id,cb) {
    var getParams = {
        audios: id,
        access_token: '***'
    };

    $.getJSON('https://api.vk.com/method/audio.getById', getParams, function (json) {
        if (json.error !== undefined) {
            var errorCode = json.error.error_code;

            if (errorCode == 14) {
                console.log('Captcha!');
            } else if (errorCode == 6) {
                console.log('Too many requests! Try again.');
                return getTrack(id);
            }
        } else {
            cb(json.response['0']);
        }
    });
}


$('.play , .download').click(function () {
    var trackItem = $(this).parent('.track'),
        trackId = trackItem.attr('data-id');

    if (trackItem.attr('data-url') !== undefined) {

    } else {
        getTrack( trackId, function (id) {

            console.log(id);

        });
    }
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы