采用以下TypeScript / Angular 2代码示例:
query(): Rx.Observable<any> {
return Observable.create((o) => {
var refinedPosts = new Array<RefinedPost>();
var observable = this.server.get('http://localhost/rawData.json').toRx().concatMap(
result =>
result.json().posts
)
.map((post: any) => {
// Assume I want to convert the raw JSON data into a nice class object with
// methods, etc.
var refinedPost = new RefinedPost();
refinedPost.Message = post.Message.toLowerCase();
refinedPosts.push(refinedPost);
})
.subscribeOnCompleted(() => {
o.onNext(refinedPosts);
})
});
}
写出来,数据库正在返回JSON。我想迭代原始JSON并创建一个自定义对象,最终返回给订阅者Array<RefinedPost>
。
代码有效,最终用户可以得到他们需要的东西,但我不禁觉得我没有做到“反应方式”。我作弊并使用外部累加器来收集数组中的元素,这似乎打败了使用流的目的。
所以,问题是,是否有更好,更简洁,更有效的方式来编写这段代码?
答案 0 :(得分:0)
回答我自己的问题。
query(): Rx.Observable<any> {
return this.server.get('http://localhost/rawData.json').toRx().concatMap(
result =>
result.json().posts
)
.map((post: any) => {
var refinedPost = new RefinedPost();
refinedPost.Message = post.Message.toLowerCase();
return refinedPost;
}).toArray();
}
这将删除内部累加器和包装的Observable。 toArray()
接受了一系列项目并将它们组合成一个数组。