Javascript 使用jQuery.promise()调用clearInterval()

Javascript 使用jQuery.promise()调用clearInterval(),javascript,jquery,setinterval,clearinterval,promise,Javascript,Jquery,Setinterval,Clearinterval,Promise,我最近一直在用setInterval和clearInterval进行大量实验,以创建我自己的自定义效果,我一直在做的一件事是在不涉及全局范围的情况下清除间隔的有效方法。我试图通过使用.promise()调用clearInterval()来提高可读性并探索可能的性能提升(下面是我尝试做的一个示例): 直到最近,我一直在使用嵌入式函数设置和清除间隔(示例): 另外,我很抱歉没有发布原始版本-我的版本控制系统已损坏。另外,我知道这个例子有点傻,因为我可以很容易地使用for循环或.each(),但这只是

我最近一直在用setInterval和clearInterval进行大量实验,以创建我自己的自定义效果,我一直在做的一件事是在不涉及全局范围的情况下清除间隔的有效方法。我试图通过使用.promise()调用clearInterval()来提高可读性并探索可能的性能提升(下面是我尝试做的一个示例):

直到最近,我一直在使用嵌入式函数设置和清除间隔(示例):

另外,我很抱歉没有发布原始版本-我的版本控制系统已损坏。另外,我知道这个例子有点傻,因为我可以很容易地使用for循环或.each(),但这只是一个例子——我确实有一些不想使用循环的实例

这是我的第一篇帖子,所以如果我做了一些与公认做法不同的事情,我会提前道歉。请让我知道,如果有什么我可以做,以改善我的职位在未来-我总是开放的建设性的批评:)


谢谢

您需要为此使用延迟。不久前,我在JSFIDLE上写了一个示例,这可能会给您一些启示

从您的代码来看,您似乎普遍误解了延迟,或者这里没有足够的代码来告诉您正在做什么。承诺隐藏
解析
拒绝
功能

基本上

var deferred = $.Deferred();
var promise = deferred.promise();

// This will only run once
var timer = setInterval( function () {
    deferred.resolve();
}, 1000);

promise.done(function () {
    clearInterval( timer );
});

令人惊叹的!这正是我一直在寻找的。我想我可能有点误解延迟,所以在继续之前,我会检查并阅读更多关于延迟的内容。非常感谢。太好了,如果这是您问题的答案,请单击复选框。:)
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);
   }
}
var deferred = $.Deferred();
var promise = deferred.promise();

// This will only run once
var timer = setInterval( function () {
    deferred.resolve();
}, 1000);

promise.done(function () {
    clearInterval( timer );
});