2017-01-12 3 views
0

Ich kann nicht scheinen, es zur Arbeit zu bringen.funktioniert clearTimeout mit Let und Const?

openContactUsForm(stop: Boolean = false) { 
    let openContactForm = setTimeout(() => { 
    $('#myButton').click(); 
    }, 6000); 
    if (stop) { 
    clearTimeout(openContactForm); 
    $('#myButton').click(); 
    } 
} 

Der Timeout klickt noch nach 6 Sekunden auch nach dem stop boolean als true

+1

Wie genau nennen Sie diese Methode? Nennen Sie es zuerst ohne stop param (aka false) und rufen Sie dann dieselbe Methode mit true auf? Ist dies der Fall, können Sie nicht erwarten, dass die Zeitüberschreitung ab dem ersten Anruf durch den zweiten Anruf beendet wird. –

+0

Das scheint zu funktionieren. Wo wird das verwendet? Hier ist eine funktionierende Demo: http://jsbin.com/laqideqari/2/edit?js,console,output – leocreatini

Antwort

1

Von vorbei, wie es sich anhört Sie die Methode einmal anrufen, dann wieder mit dem Anschlag in als wahr geben aufrufen. In diesem Fall wird beide Male, wenn Sie die Methode aufrufen, die openContactForm erneut definiert. Eine Möglichkeit, dies zu tun, wenn Sie sich in einer Reaktionskomponente befinden, besteht darin, den Zeitgeber als Eigenschaft für die Komponente festzulegen.

Wenn Sie ES6 Klassen tun Sie es zunächst im Konstruktor definieren

constructor() { 
    super() 
    this.timer = null; 
} 

openContactUsForm(stop: Boolean = false) { 
if (stop) { 
    clearTimeout(this.timer); 
    $('#myButton').click(); 
    return; 
    } 
    this.timer = setTimeout(() => { 
    $('#myButton').click(); 
    }, 6000); 

} 

wenn Ihre Tags falsch sind und nicht reactjs verwenden, müssen Sie nur den Timer in der obersten Ebene Umfang es auf diese Weise definieren, wird nicht jedes Mal neu geschrieben, wenn Sie diese Funktion aufrufen, wodurch sich die Timer-ID ändert und der ursprüngliche Timer nicht gestoppt wird.

+0

Dies ist nicht wirklich anders als der Code der OP schrieb. Wenn mit "stop" als "true" aufgerufen wird, dann wird die zuvor gespeicherte Timeout-ID überschrieben und der neu gespeicherte wird sofort gelöscht. –

+0

gute catch @ t.niese aktualisiert, um das zu beheben – finalfreq

Verwandte Themen