gpt4 book ai didi

javascript - jQuery promise,如何检查 then() 是否真的在 when() 之后?

转载 作者:行者123 更新时间:2023-11-30 14:44:53 25 4
gpt4 key购买 nike

这可能只是我惨痛的教训,但我只是想和大家确认一下。

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 在延迟后打印,ab 不是。 JSFiddle .

是这样的吗?谢谢。

最佳答案

$.when() 的参数应该是一个 Promise - 你做对了,因为 a() 返回一个 Promise。

但是 .then() 实际上接受一个函数作为参数。也就是说,您应该传递 b,而不是 b() 的结果。

表达式 .then(b()) 执行 b() 马上,所以它不会等 5 秒直到 a() 的 promise 已解决。当你有 .then(b) 时,调用 b() 只会在 a() 的 promise 被 resolved 之后发生,这是你想要什么。

因此只需将 .then(b()) 更改为 .then(b) 即可按预期运行(打印 a,等待5s,打印b,再等5s,打印c):

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');});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - jQuery promise,如何检查 then() 是否真的在 when() 之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com