我最近对 setInterval 和 clearInterval 进行了大量试验,以创建我自己的自定义效果,我一直在做的事情之一是一种清除间隔同时保持在全局范围之外的有效方法。我正在尝试通过使用 .promise() 调用 clearInterval() 来提高可读性并探索可能的性能提升(下面是我正在尝试做的事情的示例):
//caller is a collection of elements
function performEffect(caller) {
var interval = setInterval(function() { caller.next(); }, 500);
caller.promise().done(function() { interval = clearInterval(interval); });
}
直到最近,我一直在使用嵌入式函数设置和清除间隔(示例):
function performEffect(caller) {
var interval;
var count = 0;
var len = caller.length;
if (count >= len) {
interval = clearInterval(interval);
}
var tmr = function () {
interval = setInterval(function () { effectFunciton(count++); }, 100);
}
}
附言很抱歉没有发布原件 - 我的版本控制系统已损坏。另外,我知道这个例子有点傻,因为我可以很容易地使用 for 循环或 .each(),但这只是一个例子——我确实有一些不想使用循环的例子。
这是我的第一篇文章,所以如果我做了一些与公认做法不同的事情,我会提前道歉。如果以后我可以做些什么来改进我的帖子,请告诉我 - 我总是乐于接受建设性的批评 :)
谢谢!
最佳答案
为此您需要使用 deferreds。我刚才在 jsfiddle 上写了一个例子,可能会给你一些见解。
http://jsfiddle.net/landau/M3Lj4/
从您的代码来看,您似乎误解了一般的延迟,或者这里没有足够的代码来说明您在做什么。 Promises 隐藏了resolving
和rejecting
功能
基本上,
var deferred = $.Deferred();
var promise = deferred.promise();
// This will only run once
var timer = setInterval( function () {
deferred.resolve();
}, 1000);
promise.done(function () {
clearInterval( timer );
});
关于javascript - 使用 jQuery .promise() 调用 clearInterval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363115/