Функция jQuery, объединенная с deferred: .done()- функция вызывается мгновенно

Я пытаюсь получить некоторые данные в нескольких функциях и хотел бы объединить их в цепочку, чтобы выполнить последнюю функцию только тогда, когда все данные были правильно загружены.

Проблема в том, что функции в части.done() будут вызваны мгновенно и не ждут, пока Deferred-Object будет разрешен. Я также попробовал это, связав их цепью с.then(), но это тоже не сработало.

var array1, array2;

function doStuffWithReceivedData() {
    // Working with the data
}

function getArray1() {
    var defArray1 = $.Deferred();

    $.getJSON(url, function(data) {
        if (data.success) {
            array1 = data.payload;
            defArray1.resolve();
        } else {
            // Information displayed that there was an error
        }
    })

    return defArray1;
}

// Function 2 is like the first one
function getArray2() {...};

$(document).read(function() {
    getArray1()
        .done(getArray2()
            .done(doStuffWithReceivedData()));
}

1 ответ

Решение

Аргумент к .done() должен быть функцией. Вы вызываете функцию, а не передаете ее. Сними скобки.

$(document).ready(function() {
    getArray1()
        .done(function() {
            getArray2().done(doStuffWithReceivedData));
        }
}
Другие вопросы по тегам