Функция 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));
}
}