我的代码:如何顺序调用延期功能?
<?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
我想我误解了关于延迟如何工作的一些基本问题 - 任何人都可以点亮?
完美,谢谢! – georg
所以,如果你想连锁,'A - > B - > C',使用'.then'。如果你想并行运行它们并在完成时做一些事情,'(A | B) - > C',使用'$ .when' :)并且你的欢迎! –
为了让我更好地理解,你可以添加一个例子,而不是''.ajax',而不是延迟本身,例如, 'setTimeout'。 – georg