2017-08-24 7 views
0

上に存在しない私は、次のコードを持っている:プロパティ「バインドが」タイプ「のボイド」

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

private CheckIfCameraIsAvailable(forceCheck: boolean) { 

} 

を私は次のエラーを持っている:

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

私が削除したときにエラーが解決されます( (CheckIfCameraIsAvailable)関数からのパラメータですが、関数にパラメータを渡したいと思います。

+1

あなたが方法ではなく、メソッド呼び出しの結果をバインドしようとしているのはなぜARを使用しません行関数 'setInterval(()=> this.CheckIfCameraIsAvailable(false)、2 * 60 * 1000)'? – jonrsharpe

+0

関数から(forceCheck:boolean)パラメータを削除すると、エラーが解決するのはなぜですか? – Ala

+0

おそらく、 'this.CheckIfCameraIsAvailable.bind(this)'を括弧なしで実行しているので、実際には*メソッドをバインドします。 'this.CheckIfCameraIsAvailable()。bind(this)'を実行した場合、同じ問題が発生します。あなたは 'setInterval'にパラメータなしで呼び出し可能なものを渡す必要があります。 – jonrsharpe

答えて

1

この例では、誤って関数を呼び出して、結果に.bindを使用しようとしています。あなたがbindの一部としてfalse引数を渡すところ正しい長い手のコードは(次のようになります。

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

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

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

レキシカルスコープを維持するために、短手の方法は、矢印の機能を使用することです

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

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

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

そして、これは、このような中間変数を導入するのと同じです:。

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

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

const example = new Example(); 
example.run(); 
関連する問題