Nodejs:clearInterval()使用'this'

时间:2018-04-27 17:10:08

标签: javascript node.js timer clearinterval

我想clearInterval(),我可以使用clearInterval(myInterval)这样做,但为什么我不能使用clearInterval(this)?

以下是有效的代码:

<div class="fb_pagZ">
<li><a href="site.com/img=2" /></li>
</div>

以下代码不起作用:

var test =  setInterval(function(){
            request.post({url: myURL, form: {
                user : myUser,
                pass : myPass
                function(err,res,body){
                    if(res.statusCode === 302) clearInterval(test);
                })
        }, 1100)
编辑1:我很抱歉这个糟糕的问题。我不太熟悉'this'的概念,直觉上使用'this'我可以clearInterval()。原因是因为当我在第一个代码中的console.log(test)和在setInterval函数内的第二个代码中的console.log(this)中时,输出是相同的,因此是直觉。好吧,我宁愿研究'这个'。感谢大家的回答和评论。非常感谢。

2 个答案:

答案 0 :(得分:3)

setInterval()未在this的值中提供timerID。你就是不能这样使用它。 timerID仅作为setInterval()的返回值提供,如第一个示例所示。

您可以创建自己的小型计时器对象,根据需要封装内容,为您存储timerID。

例如,您可以像这样创建自己的计时器对象,它将计时器对象作为this的值传递给回调。然后,您可以使用this在对象上调用clearInterval()方法。

class IntervalTimer() {
    start(cb, t) {
        // if there was a previous interval going here, stop it
        // only one per timer object permitted
        this.stop();
        this.id = setInterval(() => {
            cb.call(this);   // set the this value to be our object
        }, t);
    }
    stop() {
        if (this.id) {
            clearInterval(this.id);
            this.id = null;
        }
    }
}

// usage
let t = new IntervalTimer();
t.start(function() {
   // based on some logic, decide to clear the interval
   // the value of "this" has been set to the timer object
   this.stop();
}, 1000);

答案 1 :(得分:-1)

有问题,在setInterval回调函数中,“this”表示上下文。在函数中,您首先编写与定时器回调函数不同的上下文。上下文很重要,因此使用clearInterval必须将参数作为整数而不是上下文本身传递。