我应该"思考"使用Observables时,我的所有数据都是流吗?

时间:2017-01-18 10:19:54

标签: angular reactive-programming observable

假设我们检索一个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似乎是思考异步操作的新方法,我觉得我应该将所有内容都视为流。但我也担心一些我现在看不到的陷阱。

你知道它们会是什么吗? 您是否认为以这种方式重新考虑我的数据是否过度?

1 个答案:

答案 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应被视为串串