2017-02-23 10 views
0

現在、私のコンストラクタ内でコールバックを使用して非同期関数を実行しようとしています。私はそのコールバックからデータを取得し、クラスのインスタンスを作成するときにそれを使用する必要があります。私のコードは、現在、次のようになります。非同期コールバック内のコール

class Foo extends Bar { 
    constructor(data) { 
     someAsyncCall((response) => { 
      data.a = response; 
      super(data); 
     }); 
    } 
} 

すべてのヘルプは大歓迎です:)

+0

あなたのスーパーはどこですか? – Piyush

+0

@ P.K。 superはES6キーワードです.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super – mhodges

+1

非同期呼び出しが開始されるまでに、親クラスは既に構築されていますが、 「スーパー」と呼ぶのは遅すぎる。 'super'はコンストラクタ内の最初の呼び出しでなければなりません(あるいは、少なくとも' this'が使われる前に呼ばれなければならない)という理由があります。 –

答えて

1

私の意見では、私は、コンストラクタ内でそれをしないだろう。 Qライブラリーと別のヘルパー・クラスをデータ・アクセス層として使用します。

HelperClass.getFooById(id) 
    .then(function (data) { 
     return new Foo(data); 
    }) 

getFooById方法はQ.defer()を使用してデータが解決されるとQ.resolve(data)を呼び出します。

コンストラクタの内部で行う場合は、データを既に持っていても要求を出さずにそのクラスのインスタンスを作成することはできません。

Qライブラリ:https://github.com/kriskowal/q

+0

私は「間違いなくコンストラクタ内でやってはいけない」と言っているかどうかわかりません。これはそのように使用できることを意味し、MDNドキュメントは例を示しています。 – mhodges

+0

フェアポイント!私は編集しました。 –

+0

これらの例へのリンクを投稿できますか?私はなぜ彼らがそうすることをお勧めするのか、興味があります。 –

関連する問題