2017-05-19 14 views
0

'this'は範囲外ですのでこのエラーが発生しますが、修正する方法が見つかりません。私は太い矢印を使用しようとし、関数が実行されます。しかし、私は使用しなければならないコールバック値がないという問題があります。ここに私のコードです:未定義(this)のプロパティ 'lockDatabase'を読み取ることができません

this.checkIfDatabaseIsLocked(function(res) { 
      //If true database is locked 
      console.log("result checkIfDatabaseIsLocked: " + res); 
      if (res) { 
      return; 
      } 
      //LockDatabase 
      this.lockDatabase().then(
      result => { 

アイデア?前もって感謝します!!!

答えて

1

thisを確保するために、ここで矢印の機能を使用することは、あなたが期待する値のまま:

this.checkIfDatabaseIsLocked(res => { 
     //If true database is locked 
     console.log("result checkIfDatabaseIsLocked: " + res); 
     if (res) { 
     return; 
     } 
     //LockDatabase 
     this.lockDatabase().then(
     result => { 
... and so on 
+0

私はこれを試しましたが、私に必要な値を返してくれませんでした。しかし、今は完璧です!どうもありがとうございました!! –

0

あなたは、あなたの関数内で正しいthisを取得するためにarrow functionsを使用するか、正しいコンテキストを使用して機能をバインドすることができます。

this.checkIfDatabaseIsLocked((res) => { 
    // `this` will be bound correctly here 
}) 

または Function.bind

this.checkIfDatabaseIsLocked((function (res) { 
    // `this` will be bound correctly here 
}).bind(this)) 

活字体でFunction.bindを使用しないでください。あなたはタイプチェックを失うでしょう。 https://github.com/Microsoft/TypeScript/issues/212

+1

typescriptプログラムで 'bind'を使うと危険ですので、通常は避けてください。 'bind'の定義は' bind(this:Function、thisArg:any、...、argArray:any):any; '' any'を返すことに注意してください。 'checkIfDatabaseIsLocked'によって期待される関数シグニチャーとを含んでいます。矢印関数を使用すると、必要な型チェックが実行されます。 – Duncan

+0

私は矢印の機能を使用しており、それは素晴らしい動作します!ありがとう! –

+0

それは本当に大きな問題です。ありがとう@ダンカン。 – Saravana

関連する問題