How do I clear all intervals?

前端 未结 4 396
长情又很酷
长情又很酷 2020-12-23 09:41

I am using

varName = setInterval(function() { ... }, 1000);

to set a couple of intervals in a jquery plugin that I\'m writing, but when th

4条回答
  •  天涯浪人
    2020-12-23 10:15

    Store 'em in an object. Since you're the only one making these intervals, and you know what they are, you can store them and later mess with them as you wish. I'd create an object dedicated for just that, something like:

    var interval = {
        // to keep a reference to all the intervals
        intervals : new Set(),
    
        // create another interval
       make(callback: (...args: any[]) => void, ms: number, ...args: any[]) {
            var newInterval = setInterval(callback, ms, ...args);
            this.intervals.add(newInterval);
            return newInterval;
        },
    
        // clear a single interval
        clear(id) {
            this.interals.delete(id);
            return clearInterval(id);
        },
    
        // clear all intervals
        clearAll() {
            for (var id of this.intervals) {
                this.clear(id);
            }
        }
    };
    

    Your first question might be

    Why make a separate object for just that?

    Well Watson, it's to keep your hand-made intervals related to your plugin/project away from prying eyes, so you won't mess with other intervals being set in the page not related to your plugin.

    Yes, but why can't I store it inside the base object?

    You most certainly can, but I think this way is much cleaner. It separates the logic you do in your base with the weird timeout logic.

    Why did you store the intervals inside a Set and not an array?

    Faster access and a little bit of cleaner code. You can go either way, really.

提交回复
热议问题