Я пытаюсь понять Deferred
jQuery, но, несмотря на примеры, я не могу добиться того, чего хочу.
Итак, я хотел бы вызвать 2 функции асинхронно, и, когда ОБЕ завершены, вызвать еще одну.
Вот мой код
function1();
function2();
function3();
function1()
и function2()
делают ajax-вызов моему приложению ASP.NET, и они отлично работают. Они должны быть завершены до начала function3()
.
Я читаю снова и снова документацию, но function3() не ждет конец двух других. Не могли бы вы предоставить мой образец, чтобы я понял Deferred
? Мне очень нужно, чтобы они закончили важную часть моего проекта.
Большое тебе спасибо.
БОНУСНЫЙ ВОПРОС
Я читал об .when
deferred... Можно написать в каком-то элементе <div>
что-то вроде выполняется функция1(), затем выполняется функция2() и т.д...?
ОБНОВЛЕНИЕ
Подробнее о function1()
и function2()
: Они очень похожи, вот их тело:
function function1() {
return $.ajax({
url : "@Url.Action("MyMethod", "MyController")",
contentType : "application/json; charset=utf-8",
dataType : "json"
}).done(function(data) {
$.each(data, function(index) {
pushDatas(data[index]);
})
}).fail(function (result) {
alert("function1failed");
});
}
function pushDatas(data)
{
if(!($.inArray(data, loadedDatas) !== -1)) {
loadedDatas.push(data);
}
}
ОБНОВЛЕНИЕ 2
Функции вызываются так:
<script type="text/javascript">
$(document).ready(function () {
//some others asynchrounous functions
$.when(function1(), function2()).done(function3("test"));
}
...
</script>