2017-04-17 4 views
1

Angular型アプリケーションでObservableを使用していて、期待どおりに動作しています。しかし、私はちょっと混乱している状況に遭遇しています。一つの成分で、私は成功し、観察に加入していますし、このように、結果をフィルタリング:Observablesを使用し、角型アプリケーションの配列リストをフィルタリングする

this.clientsService.getAll() 
    .subscribe(resRecordsData => { 
     this.records = resRecordsData; 
     this.inactiveRecords = this.records.filter(record => record.category && record.category.includes('inactive')); 
     this.records = this.inactiveRecords; 
    }, 
    responseRecordsError => this.errorMsg = responseRecordsError); 

をしかし、別のコンポーネントでは、私はほぼ同じことをやっている間、私が印刷されたエラーを取得していますコンソール読み:

例外:

012:_this.records.filterは、そのコンポーネントがどのように見えるこの何の機能

ではありません

第2の場合の問題は何ですか?なぜ最初のケースではなく、そこにエラーが表示されますか?

+0

それぞれthis.recordsにカーソルを置くと、データタイプが表示されますか? 2つの例でそれらは異なっていますか? – DeborahK

+0

これらは同じように見えます:(プロパティ)ConsultingComponent.records:any [] – Muirik

+0

"records"は両方のコンポーネントで空の配列に設定されています。 – Muirik

答えて

2

あなたは

this.clientsService.getAll() 
    .filter(record => record.category && record.category.includes('inactive')) 
    .subscribe(
     resRecordsData => { 
      this.records = resRecordsData; 
     }, 
     err => this.errorMsg = err 
    ); 

をサブスクライブする前に、私は参照を取る、角度がRxJSを使用しています信じてフィルタリングしていないではないのはなぜかもしれない最初のケースで

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-filter

+0

いずれにしても、最初のものがエラーになるのはなぜですか?どちらの場合も、購読後にフィルタリングしています。それだけでは問題ではありません。 – Muirik

+0

結果が単一項目でない場合、フィルタは配列に対して機能しません。そこにコレクションがありますか?コンソールを置くことができます。ログ – Ovais

+0

非常に興味深いです。私の驚きに、これはうまくいった!とても有難い! – Muirik

0

それが原因で非同期な性質のものであり、あなたは

this.clientService.getByCategory('consulting', 1, this.pagesize) 
    .skipWhile(data => { 
     if(data.length) { 
      return false; 
     } 
    }) 
    .subscribe(resRecordsData => { 
     this.records = resRecordsData; 
     this.OTRecords = this.records.filter(record => record.type && record.type.includes('OT')); 

    }, 
    ((responseRecordsError) => {this.errorMsg = responseRecordsError}); 

ノートにskipWhile演算子を使用することができます。this.records=[];

更新インスタンス化されていることを確認してください: あなたは、サブスクリプション内this.records=this.OTRecords;を割り当てるべきではないの理由あなたは未定義のエラーを持っています。フィルタエレメントは複数のオブジェクト(配列)を含有するが、後者の場合には

+0

まだ同じエラーが発生しています。また、asyncが問題だった場合、確かにそれが両方の問題になるでしょう。私のここでのポイントは、2番目の例はエラーを返し、最初の例はエラーを返さないということです。 – Muirik

+0

私の更新された答えを見てください – Aravind

関連する問題