Мой код:Как вызывать отложенные функции последовательно?
<?php
if(isset($_GET['m'])) {
$m = $_GET['m'];
sleep($m);
print "done, m=$m";
die;
}
?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
<script>
function w(s) {
document.body.innerHTML = document.body.innerHTML+ "<br>" + s
}
function aaa(def) {
w("begin aaa");
$.ajax({
type: "GET",
data: {
m: 5
}
}).done(function(html) {
w(html);
def.resolve();
});
}
function bbb(def) {
w("begin bbb");
$.ajax({
type: "GET",
data: {
m: 1
}
}).done(function(html) {
w(html);
def.resolve();
});
}
$(function() {
$.when(
$.Deferred(function(d) { aaa(d) }).promise(),
$.Deferred(function(d) { bbb(d) }).promise()
).done(function() {
w("OK")
});
})
</script>
Я ожидаю, что вторая функция ждать первого завершения, то есть мой вывод должен быть
begin aaa
<--pause
done, m=1
begin bbb
<--pause
done, m=5
OK
Вместо этого я получаю
begin aaa
begin bbb
<--pause
done, m=1
<--pause
done, m=5
OK
Я думаю, что я неправильно понимаю, что-то фундаментальное о том, как работает отсрочка - может ли кто-нибудь пролить свет?
Perfect, спасибо! – georg
Итак, если вы хотите связать цепочку, 'A -> B -> C', используйте' .then'. Если вы хотите запустить их параллельно и сделать что-то, когда все будет готово, '(A | B) -> C', используйте' $ .when' :) И ваш приветствуем! –
Для моего лучшего понимания вы могли бы добавить пример с чем-то вместо '$ .ajax', который не является отложенным per se, например, например. 'SetTimeout'. – georg