2016-12-02 6 views
1

私、私の角度2サービスでは、私はこの方法を持っている:Rxjs角セレクタ2のキーセレクタを持つ明確な演算子http?

notify(userID: string) { 
    return Observable.interval(5000) 
     .map(() => this.baseUrl + '/notification/GetUnseen?userId=' + userID) 
     .switchMap(url => { 
     this.datatService.set(url); 
     return this.datatService.get(); 
    }) 
    .flatMap(response => response.json().slice()) 
    .distinct(function (x) { return x.id }); 
    } 

は、どのように私はこのCASにキーセレクタとの明確な演算子を使用することができますか? 私はそれをしようとするとき私はこのエラーがあります:プロパティ 'ID'はタイプ '{}'に存在しません。

UPDATE:

私はこの方法で取得する最終的な結果は次のとおりです。

{ 
    id:"f3055770-6e66-4936-8e9a-732b53121549" 
    message:"Empty Notification for test ......" 
    navigationLink:"/api/home" 
    seen:false 
    sendedOn:"2016-12-02T15:19:44.856Z" 
    userId:null 
    } 

私はすでに私がいけないの通知が再度

を取得したい持っているので、もし、結果をフィルタリングしたいと思います

答えて

1

データ構造がどのようになっているか正確にはわかりませんが、サンプルコードから、このコード部分を使って観測可能なシーケンスに配列をマッピングしようとします。

(...).flatMap(response => response.json().slice()) 

Observable.fromで新しい観測可能シーケンスを作成してからswitchMapを使用して元のストリームに戻す必要があります。次に、希望者としてdistinct演算子を使用することができます。このサンプルコードを参照してください:

const str = JSON.stringify([{id: 1}, {id: 1}, {id: 2}, {id: 1}]); 

Rx.Observable.of(str) 
    .map(x => JSON.parse(x)) // replication of your sample code until this line 
    .switchMap(x => Rx.Observable.from(x)) 
    .distinct(x => x.id) 
    .subscribe(x => console.log(x)); 

// output: { id: 1 } 
//   { id: 2 } 

Live code on JSBin

+0

私はこのしようとすると、あなたのexempleは多分何か –

+0

が欠けi'am、私の場合で動作し得ることができません: 通知(ユーザーID:文字列){ リターンをこの通知には、以下のような情報が含まれています:。Observable.interval(5000) .map(()=> this.baseUrl + '/ notification/GetUnseen?userId =' + userID) .switchMap(url => { return observable.from(this.datatService.get url)); } .flatMap(response => Observable.fro m(response.json()。slice())) .distinct(x => x.id); } 私は4つではなく1つのオブジェクトしか持っていません! –

+0

それは私に多くの助けになりました、なぜ私たちは再び観察可能なものを作成する必要があるかを説明してください –

関連する問題