2017-02-06 15 views
0

firebaseからデータを読み込むには以下のコードがありますが、それはうんざりです。何が起こるangle2を使用してfirebaseからデータが戻ってきているか確認してください

loadData() { 

    // app.component 
    this.loadJobCodeSubscription = this.databaseService.getData() 
    .subscribe(result => { 

     this.data = null; 
     var data_raw: Array<any>; 

     if (Object.keys(result)[0] != '$value') { 
     data_raw = Object.keys(result).map(function (key) { 
      return [key, result[key]['firstName'], result[key]['lastName']]; 
     }) 

     // remove extra data downloaded from firebase 
     jobDataRaw.pop(); 
     jobDataRaw.pop(); 
     } 

     this.jobCodeData = jobDataRaw; 

    }, error => { 
     console.log('Error downloading job codes', error) 
    }) 
} 

// DatabaseService 
getData() { 
    return this.af.database.object('/jobCodes/' + this.currentUser.company) 
} 

は、私はクエリを実行してい枝がデータを持っていない場合、私は、データが戻って来ている場合は、私の「結果」は私のような何かを得るだろう、

empty

アンディを表示するということです

not empty

これら二つのデータ間の唯一の違いは、(私がチェックするための考えることができることを)1つです$ valueキーを持っていて、1つはありません その理由は、そのキーが存在するかどうかを確認するためにその奇妙なifステートメントを使用している理由です。

ちょっとした方法でデータをチェックする方法はありますか? 「どんな」は現在

注意しているに反対するよう

また、適切なフォーマットに「結果」をキャストする方法があります。 AngularFire2でAngular 2を使用しています

答えて

0

まず、バックエンドのコントロールがあると仮定すると、より簡単に理解できるようにリターンを変更できます。空のペイロードを返すことは、あなたが本当に「何も意味しない」場合は少し混乱します。この行を行うのは危険

第二に、:Object.keys(結果)として

Object.keys(result)[0]

は、それが決定論的であっても、将来的には同じではないかもしれません。

私はこれを行うための最も安全な方法があることだと思う:

if (Object.keys(result).every(k => k != '$value')) { 

言われていること、私はあなたが提示した情報与えられたことを判断する簡単な方法はないと思います。この方法を続けると、あなたの声明を慎重に守っていることを確認することをお勧めします。これは、 の間違ったデータが将来にわたって失われる可能性があるためです。

+0

なら、私は残念ながら、私はfirebase – user172902

+0

を制御できません呼び出すことができます。 – chrispy

+0

私は、ある種のfirebase構造に結果をキャストし、result.hasDataや何かのようなことをする方法があると思っています。ありがとうございました – user172902

0

Observableの戻り値の型を元のfirebaseスナップショットに変更すると、データがよりよく見えることが分かります。それは、これはおそらくあなたの最善の策である(snapshot.val()){}

return this.af.database.object('/jobCodes/' + this.currentUser.company, {preserveSnapshot: true}) 
関連する問題