2016-09-01 6 views
0

thisへの正しい参照を格納するために、次のコードブロックがあります。 私はModels.ImageのためにMongooseを使用しています。self =これはコールバック内のself.functionにアクセスできません

class some { 
    public one() { 
     var self = this; 
     this.another(); //edited: this.another() is not a function 
     Models.Image.findById(id).then(function(data) { 
      self.another(); //self.another is not a function 
      .... 
     }); 
    } 
    public another() { 
     .... 
    } 
} 

リンターはthisするselfを示したが、私はそれを実行したとき、私にエラーを与えています。ここで何が起きてるの?どのようにそれを解決するには?

クラスはルートを表すためにバインドされたルートハンドラです。

私はさらに追加したいと思います。 one()(コールバックではない)内のthis.another()を呼び出すと、まだ私にis not a functionエラーが表示されます。何とか、thisはクラスを参照していません。 何が問題なのですか?

+2

それは問題はあなたが含ま限られたコードであるかを理解するのは難しいです。それは大丈夫だと思われますが、問題があるので、あなたのコードをもっと含めればそれが最善になるでしょう。サイドノートでは、矢印関数を使うことができるので、この 'self = this'は必要ありません。 –

+5

どのように 'one()'を呼びますか? – JohnnyHK

+0

問題を更新しました。 –

答えて

2

編集:クラスはルートを表現するためにバインドされたルートハンドラです。

おそらく問題はここにあります。

メソッドoneが呼び出されるため、thisはクラスsomeのインスタンスにバインドされません。問題はコールバックに関するものではありません。 oneの最初の行では、thisはすでに誤った値を持っています

var self = this; // self has a wrong value because this has a wrong value 
+0

ええ、問題は、ルートハンドラがバインドされた方法にありました。私は 'some.one.bind(some.one)'を使っていました。私はそれを 'some.one.bind(some)'に置き換えました。ありがとうございました。問題がどこにあるかを知った後、解決策はここにありましたhttp://stackoverflow.com/questions/15604848/express-js-this-undef-after-routing-with-app-get –

-3

他は())(パブリック1の範囲内であることが予想されます。

class some { 
    public one() { 
     var self = this; 
     Models.Image.findById(id).then(function(data) { 
      self.another(); //self.another is not a function 

      .... 
     }); 
    } 
    public another() { 
     .... 
    } 
} 

たぶん、より良い、このような:

class some { 
    public one() { 
     var self = this; 
     Models.Image.findById(id).then(function(data) { 
      self.another(); //self.another is not a function 
      .... 
     }); 
     another() { 
      .... 
     } 
    } 
} 
+0

わかりません。あなたは何を問題としていましたか、どのように修正しましたか? –

+0

あなたがself.anotherと呼ぶ方法です。別の()は公開されている必要があります()。 – mdarmanin

+1

これは全く動作しません。 –

関連する問題