Zac*_*bel 3 javascript jquery setinterval promise clearinterval
我最近一直在用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); });
}
Run Code Online (Sandbox Code Playgroud)
直到最近,我一直使用嵌入式功能设置和清除间隔(示例):
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);
}
}
Run Code Online (Sandbox Code Playgroud)
PS我很抱歉没有发布原文 - 我的版本控制系统已损坏.另外,我知道这个例子有点傻,因为我可以很容易地使用for循环或.each(),但它只是一个例子 - 我确实有我不想使用循环的实例.
这是我的第一篇文章,所以如果我做的不同于公认的做法,我会提前道歉.如果有任何我可以做的事情来改善我以后的帖子,请告诉我 - 我总是接受建设性的批评:)
谢谢!
你会想要使用延迟.我刚才在jsfiddle上写了一个例子,可能会给你一些见解.
http://jsfiddle.net/landau/M3Lj4/
从您的代码中看,您似乎总是误解延迟,或者这里没有足够的代码来告诉您正在做什么.承诺隐藏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 );
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1841 次 |
最近记录: |