Я не совсем понимаю, как использовать отложенный объект jQuery, и примеры, которые я видел, мне не помогают. Что я хочу сделать: 1.) получить объект календаря с помощью вызова ajax, 2.) заполнить часть моего глобального объекта (MYOBJ) данными календаря, а затем 3.) заполнить элемент страницы новыми данными в MYOBJ , Эти три функции реализуют логику, и я хочу вызвать их последовательно:
function getCalendar(refDate, numDays) {
return $.ajax({
type: "POST",
url: "services/Calendar.asmx/GetCalendar",
data: '{ "refDate": "' + refDate + '", "numDays": "' + numDays + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json"
}).promise();
}
function loadCalendarData(response) {
var calData = jQuery.parseJSON(response.d);
MYOBJ.cal.dMin = calData.dMin;
MYOBJ.cal.dMax = calData.dMax;
MYOBJ.cal.dates = calData.dates; // array of date strings
}
function populateCalendar (x, y, z) {
// use data from MYOBJ.cal here
}
Я не могу понять, как заставить populateCalendar () ждать, пока не завершится loadCalendarData (). Это ...
$.when(getCalendar(myDate, 70))
.then(loadCalendarData)
.then(populateCalendar(a, b, c))
.fail(alertCalendarError);
... явно неверно - это всего лишь один вариант, который я бросил в стену, потому что я не понимаю, что я делаю ...:)
ОБНОВЛЕНИЕ: Как правильно указывают GoldenNewby и Брайан ONeil, я мог бы просто прикрепить мой вызов к populateCalendar в конце loadCalendarData. Это определенно сработает. Хотелось бы, чтобы я думал об этом во время публикации. Я предполагаю, что моей конечной целью было выяснить, как добиться последовательности. В этом случае, однако, я не могу придумать ни одного сценария, где loadCalendarData будет вызываться без вызова populateCalendar непосредственно после него, поэтому это решение определенно имеет смысл. Спасибо.