Javascript jQuery承诺,如何检查then()是否真正在when()之后?
这可能只是我从中学到的一个教训,但我只想向大家证实这一点Javascript jQuery承诺,如何检查then()是否真正在when()之后?,javascript,jquery,promise,Javascript,Jquery,Promise,这可能只是我从中学到的一个教训,但我只想向大家证实这一点 function a() { var dtd = $.Deferred(); console.log('a'); setTimeout(() => { dtd.resolve(); }, 5000); return dtd.promise(); } function b() { var dtd = $.Deferred(); console.log('b'); setTimeout
function a() {
var dtd = $.Deferred();
console.log('a');
setTimeout(() => {
dtd.resolve();
}, 5000);
return dtd.promise();
}
function b() {
var dtd = $.Deferred();
console.log('b');
setTimeout(() => {
dtd.resolve();
}, 5000);
return dtd.promise();
}
$.when(a()).then(b()).done(function () {console.log('c');});
延迟后只打印c
,a
和b
不打印。
是这样吗?谢谢。的参数
$。when()
应该是一个承诺-您做得对,因为a()
返回一个承诺
但是.then()
实际上将函数作为参数。也就是说,您应该通过b
,而不是b()
的结果
表达式。然后(b())
立即执行b()
,因此它不会等待5秒,直到a()
的承诺得到解决。当您有。然后(b)
,调用b()
只会在a()
的承诺得到解决后发生,这正是您想要的
因此,只需更改。然后(b())
到。然后(b)
将按预期运行(打印a
,等待5s,打印b
,再等待5s,打印c
):
函数a(){
var dtd=$.Deferred();
console.log('a');
设置超时(()=>{
dtd.resolve();
}, 5000);
返回dtd.promise();
}
函数b(){
var dtd=$.Deferred();
console.log('b');
设置超时(()=>{
dtd.resolve();
}, 5000);
返回dtd.promise();
}
$.when(a()).then(b).done(函数(){console.log('c');})代码>
事情总是这样。您在这里的预期输出是什么?a会在5s后打印,然后b&c会在5s后打印?我想应该是a…5s…b…5s…c