gpt4 book ai didi

javascript - 使用虚拟和空的 jQuery promise

转载 作者:搜寻专家 更新时间:2023-11-01 05:11:34 24 4
gpt4 key购买 nike

我运行多个动画并在它们完成时执行一些操作,使用 jQuery promises:

$.when(foo(),  
bar(),
baz())
.done(allDone);

每个函数(foo 等)都返回一个 jQuery.Promise()

现在说我想包含一个不动画的函数,但它的时间与动画有关 - 我不能将它包含在链中,因为它不返回 promise 。

所以我可以这样破解它:

function qux() {
if (something) {
return $(".whatever")
.removeClass("bob")
.addClass("fred")
.append(/*...do stuff...*/)
.animate({ left: "+=0" }, 0, callback ) // <-- dummy animation does nothing
.promise(); // <-- this is a dummy promise
}
else {
return $().promise(); // <-- this is an "empty" promise
}
}

现在我可以链接它了:

$.when(foo(),  
bar(),
baz(),
qux())
.done(allDone);

这行得通。但我在这里违反了规则 - 是否有任何我没有考虑到的问题,或者我是否以某种方式踩到了 fx 队列?

更新
根据下面的答案,qux() 函数可以重写为:

function qux() {
if (something) {
$(".whatever")
.removeClass("bob")
.addClass("fred")
.append(/*...do stuff...*/);
}
}

最佳答案

如果你打算将它与 $.when 一起使用,你不需要返回一个空的 promise 。 $.when 可以处理非 promise 。 Demo .

function promise(flag) {
if(flag) {
var dfd = $.Deferred();
setTimeout(function(){
console.log('promise');
dfd.resolve();
}, 1000);
return dfd.promise();
}

console.log('promise');
}

$.when(promise(), promise(true), promise(), 15).done(function(){
console.log('Done');
});

如果你想返回一个空的 promise ,你可以使用 $.Deferred().resolve().promise()

关于javascript - 使用虚拟和空的 jQuery promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25032549/

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