假设我们检索一个Category数组作为JSON:
[ {id: "111", name: "cat1"}, {id: "222", name: "cat2"}, {id: "333", name: "cat3"} ]
方法得到它:
getCategories(): Observable<Array<Category>> {
return this.http.get('/categories').map(data => data.json());
}
我们也有:
getCategoryById(id): Observable<Category> {
return this.getCategories()
.map(categories => categories.find(c => c.id === id));
}
这有效,但我想知道我是否正确使用了可观测量 我应该将我的类别视为流而不是原子数据集吗?
代码如下:
getCategoriesAsStream(): Observable<Category> {
return this.http.get('/categories')
.map(data => data.json())
.flatMap(categories => Observable.from(categories));
}
getCategoryById(id): Observable<Category> {
return this.getCategoriesAsStream()
.find(category => category.id === id);
}
由于observables / RxProgramming似乎是思考异步操作的新方法,我觉得我应该将所有内容都视为流。但我也担心一些我现在看不到的陷阱。
你知道它们会是什么吗? 您是否认为以这种方式重新考虑我的数据是否过度?
答案 0 :(得分:0)
你是对的。对我来说,Observables就像溪流&#34;,我们可以过滤,压缩它们等。
你需要记住一件事。当使用带有angular2的observable时,你的第二个例子可能会给你带来一些问题:
想象一下以下模板:
<ul>
<li *ngFor="let category from (getCategoriesAsStream() | async)">{{category}}</li>
</ul>
<!--- async pipe is preferable way to bind observables in template, ie they unsubscribe automatically ---->
给定的模板只会渲染一个元素,而不是三个,这是你在json中得到的。
结论,observables
应被视为串串。