2016-12-05 2 views
1

У меня есть obeservables этих объектов:Угловые 2 Rxjs: Нанести отличие от объектов

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

Я хотел бы, чтобы не получить дублированный объект (на основе идентификаторов), и я использую этот метод для достижения его

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

} 

Когда я добавляю отдельный (x => x.id) в качестве последнего оператора, у меня есть только один объект вместо четвертой помощи?

UPDATE:

Я называю этот метод в OnInit() жизненного цикла моего компонента, так что способ выполнения каждые 5 секунд, чтобы получить уведомление, я использую окрености таким образом:

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

ОБНОВЛЕНИЕ 2

Serveur сырья ответ:

"[{"userId":null,"sendedOn":"2016-12-02T15:19:44.856Z","message":"Empty Notification for test ......","navigationLink":"/fusion/home","seen":false,"id":"f3055770-6e66-4936-8e9a-732b53121549"},{"userId":null,"sendedOn":"2016-12-02T15:19:45.146Z","message":"Empty Notification for test ......","navigationLink":"/fusion/home","seen":false,"id":"ce172122-11d9-4054-a3e4-594c8c910a7d"},{"userId":null,"sendedOn":"2016-12-02T15:19:45.146Z","message":"Empty Notification for test ......","navigationLink":"/fusion/home","seen":false,"id":"66e32c45-f544-4ce6-901c-e5ac64904954"},{"userId":null,"sendedOn":"2016-12-02T15:19:45.147Z","message":"Empty Notification for test ......","navigationLink":"/fusion/home","seen":false,"id":"4c2322cb-526c-490e-8a86-f1e9ced1c34f"}]" 
+0

Не могли бы вы дать контекст: 1) Как вы называете этот метод? 2) Где вы добавляете оператор 'distinct'? – Meir

+0

Вы уверены, что у этих четырех объектов нет одинакового 'id'? – martin

+0

Обновлено, @martin Да, я знаю, что идентификаторы не совпадают. –

ответ

1

Я нашел решение для отдельного!

В самом деле, функция передается disctinct может принимать 2 параметра (precedentValue, actualValue), так что вы можете решить эту проблему так:

.... 
.... 
.distinct(function (x, y) { return x.id === y.id; }); 

Он возвращает логическое значение на каждой итерации (это x.id = y.id? => true или false ...).

** UPDATE **

Моя ошибка в том, что я искал 4.0 документации rxjs, и мой проект на rxjs 5.