2016-12-12 9 views
0

私は、AngularFire2を持つFirebase-Databaseからいくつかの値を集計しようとしており、それらをコンポーネントロジックでさらに処理するために使用しています。 いくつかのアドバイスを参考にして、希望する値(How to map and reduce child values from FirebaseListObservable)をクエリして減らすことができましたが、後で処理するためにそれらをローカル変数に入れようとすると、その値は常に未定義です。Firebaseを一度問い合わせてその戻り値をローカルパラメータに格納する方法は?

私はfirst()を使用して、観測可能性が1回だけ実行され、結果がなくなることを保証しようとしました。

を一度だけ取得するにはボタンをクリックしたときの意味は?このブロックが初めて呼び出されたとき、その結果は常に「undefinied」は

//sum up scores for questions belonging to category 'id' 
... 
let scoresObservable = this.dbRef.database.list(`/question-answers/${id}`) 
         .first() 
         .map((array) => array.reduce((acc, element) => 
             acc + element.$value, 0)); 
let result; 
let total = scoresObservable.subscribe(sum => { 
       result = sum; 
       console.log(`total for ${id}: ` + sum) 
      }); 
return result; 

は、これは私のコードです。あなたはscoresObservable.subscribeに合格

答えて

0

機能がすぐに呼び出されません(database.listがデータを取得するときに呼び出されます)のでresultには値が右のサブスクリプションの後にありません。 subscribe戻ってサブスクリプションとtotalがために適切な名前のようには見えませんのでご注意、また

@Comopnent({ 
    ... 
    template: '{{ result }}' 
    ... 
}) 
class SomeComponent { 
    result: number; 

    ... 

    someFunc() { 
    ... 

    scoresObservable.subscribe(sum => { 
     this.result = sum; 
     console.log(`total for ${id}: ` + sum) 
    } 
} 

テンプレートに結果とコードブロックを表示したい場合は、あなたのような何かを行うことができ、コントローラ内部にありますそれ。

関連する問題