Я просмотрел множество примеров, которые используют этот синтаксис, но я не вижу, что я делаю неправильно. Функция "then" выполняется до того, как возвращается вызов ajax.
Я пробовал также использовать $.deferred и несколько других шаблонов безрезультатно.
Кто-нибудь может увидеть, что мне не хватает?
Я отлаживаю и вижу вызовы, сделанные из сделанного/потом, прежде чем вызов ajax вернет ему успешные (или ошибки) данные.
Спасибо за любую помощь.
Главный вызов:
this.addFirstTask = function(task) {
var totalHours = GetHours();
$.when(totalHours).done(function (data) {
task.TaskHours(data);
self.add(task);
});
};
Он вызывает следующую функцию ajax:
function GetHours() {
$.ajax({
url: "/api/tst/GetMyData",
type: 'GET',
dataType: 'json',
success: function(data) {
return data;
},
error: function(data) {
return 0;
}
});
};
Спасибо!
post mortem:
в дополнение к добавлению возврата к вызову ajax, в соответствии с дополнительными советами, я удалил успех и ошибку из вызова ajax и изменил addFirstTask на:
this.addFirstTask = function(task) {
var totalHours = GetHours();
$.when(totalHours)
.then(function (data) {task.TaskHours(data);})
.done(function () { self.add(task); });
};
Если GetHours преуспевает, я обновляю значение TaskHours. Если он терпит неудачу, я просто пропущу его. Я понял, что DONE - это "НАКОНЕЦ" в .NET try/catch. Поэтому вместо того, чтобы сразу добавлять задачу, а затем позволяя моему наблюдаемому привязке обновлять ее, когда значение возвращается, даже self.add является частью асинхронного вызова.