Угловой сплющенный наблюдаемый поток - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть следующий угловой код, который вызывает службу, которая возвращает наблюдаемую

this.dataSource = Observable.create((observer: any) => {
    observer.next(this.asyncSelected);
})
.pipe(
    mergeMap((token: string) =>
        this._animalSuffixesServiceProxy.getAll(token, undefined, undefined, undefined)
    )
);

Метод getAll возвращает наблюдаемое в следующем формате:

{"result":{"totalCount":2,"items":[{"animalSuffix":{"name":"Test","id":1}},{"animalSuffix":{"name":"Test2","id":2}}]}}

Предполагая, чтоизменяя принцип работы getAll, я не хотел бы знать, как наилучшим образом передать этот ответ через наблюдаемые операторы, чтобы я мог получить сглаженную наблюдаемую форму, которая выглядит следующим образом:

[{"name":"Test","id":1},{"name":"Test2","id":2}]

1 Ответ

0 голосов
/ 09 апреля 2019

У вас должна быть возможность использовать оператор map для обработки вашего ответа в желаемом формате. Это должно быть похоже на следующее:

this.dataSource = Observable.create((observer: any) => {
    observer.next(this.asyncSelected);
})
.pipe(
    mergeMap((token: string) =>
        this._animalSuffixesServiceProxy.getAll(token, undefined, undefined, undefined)
    ),
    map(response => response.result.items.map(item => item.animalSuffix))
);

Это сопоставляет ваш ответ с массивом ваших элементов, причем значением для каждого элемента является значение animalSuffix элемента ответа.

map в pipe() является оператором RxJS для отображения каждого элемента, испускаемого в наблюдаемой. Другой map является оператором массива (они оба ведут себя одинаково).

...