【发布时间】:2017-04-21 11:24:39
【问题描述】:
为了学习 Angular,我模拟了一个做两件事的网络服务:
- 返回一个数组的 Observable (
Observable<T[]>) - 将由 ID 标识为 Observable (
Observable<T>) 的项目返回
我就是这样实现的:
export class Event {
constructor(public id: number, public title: string) {}
}
const EVENTS = [
new Event(1, 'Tooth extraction'),
new Event(2, 'English lesson'),
new Event(3, 'Driving lesson'),
new Event(4, 'Mortgage meeting'),
];
let eventsObservable: Observable<Event[]> = Observable.of(EVENTS);
import { Injectable } from '@angular/core';
@Injectable()
export class EventsService {
getEvents() {
return eventsObservable;
}
getEvent(id: number|string) {
return eventsObservable.concatMap((x) => {
return x;
}).filter((event: Event) => {
return id === event.id;
});
};
}
我只是从 Observable 和 Angular 开始,但是,我不认为我对 getEvent(id: number|string) 的实现是最佳的,因为我正在做的是:
- 拍下
Observable<T[]>中的每一项, - 将每个发送为
Observable<T>, - 然后才过滤发出的项目以找到我正在寻找的项目,
- 将此项目作为 Observable 返回。
有没有更好、更优化的方式从Observable<T[]> 返回一个独特的项目?
【问题讨论】:
-
为什么不只是
return Observable.from(EVENTS.filter(e => e.id === id)))?
标签: angular rxjs observable