2017-08-24 1 views
0

Ich habe den folgenden Code:Property 'bind' existiert nicht auf Typ 'VOID'

setInterval(this.CheckIfCameraIsAvailable(false).bind(this), 2 * 60 * 1000); 

private CheckIfCameraIsAvailable(forceCheck: boolean) { 

} 

Ich habe die folgende Fehlermeldung:

Property 'bind' does not exist on type 'void'

Der Fehler behoben wird, wenn ich entfernen (forceCheck: boolean) Parameter von (CheckIfCameraIsAvailable) Funktion, aber ich möchte einen Parameter an die Funktion übergeben.

+1

Sie versuchen, das Ergebnis der Aufruf der Methode zu binden, nicht die Methode Warum nicht ein ar verwenden Zeilenfunktion 'setInterval (() => this.CheckIfCameraIsAvailable (false), 2 * 60 * 1000)'? – jonrsharpe

+0

Warum wird der Fehler gelöst, wenn ich den Parameter (forceCheck: boolean) aus der Funktion entferne? – Ala

+0

Weil dann vermutlich 'this.CheckIfCameraIsAvailable.bind (this)', ohne die Klammern, so * tatsächlich die Methode binden *. Wenn du 'this.CheckIfCameraIsAvailable(). Bind (this)' gemacht hast, hast du das gleiche Problem. Sie müssen ein Callable ohne Parameter an 'setInterval' übergeben. – jonrsharpe

Antwort

1

In Ihrem Beispiel rufen Sie die Funktion versehentlich auf und versuchen dann, das Ergebnis .bind10 zu verwenden. Der richtige Lang Hand Code wäre die folgend (in dem Sie das false Argument als Teil der bind passieren:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    setInterval(this.CheckIfCameraIsAvailable.bind(this, false), 2000); 
    } 
} 

const example = new Example(); 
example.run(); 

Die Kurz Hand Weg, um den lexikalischen Gültigkeitsbereich zu erhalten, ist eine Pfeil-Funktion:

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    setInterval(() => this.CheckIfCameraIsAvailable(false), 2000); 
    } 
} 

const example = new Example(); 
example.run(); 

Und das ist das Äquivalent einer Zwischenvariablen wie diese Einführung.

class Example { 
    CheckIfCameraIsAvailable(forceCheck: boolean) { 
    alert(forceCheck); 
    } 

    run() { 
    const _this = this; 
    setInterval(function() { _this.CheckIfCameraIsAvailable(false) }, 2000); 
    } 
} 

const example = new Example(); 
example.run(); 
Verwandte Themen