我需要处理使用Angular2和TypeScript编写的Web应用程序中的RxJs Observable
。由于我以前从未使用过rxjs并且对反应式编程也不熟悉,因此有时会难以找到完成某些特定任务的正确方法。
目前,我面临一个问题,需要将Array<Observable<T>>
转换为Observable<Array<T>>
。
以下是一个示例来解释:
- 我有一个
Observable
,它给我提供了一个User
列表(Observable<Array<User>>
) User
类有一个函数getPosts
返回Observable<Array<Post>>
- 我需要将
Observable<Array<User>>
映射到Observable<Array<Post>>
,以便在onNext
函数中评估所有Post
s。
我可以轻松地使用map((result : Array<User>) => result.map((user : User) => user.getPosts()))
从Observable<Array<User>>
映射到Observable<Array<Observable<Array<Post>>>>
,并将Array<Array<Post>>
扁平化为Array<Post>
。
但是,我无法找到正确的方法将Observable<Array<Observable<Array<Post>>>>
映射到Observable<Array<Array<Post>>>
。目前,我使用combineLatest
函数和flatMap
函数一起使用。在我使用的编辑器(Atom Editor)中,它似乎可以工作,并且没有显示任何错误。但是现在我使用Netbeans,在这段代码中它向我显示了一个错误。同时,使用“tsc”编译代码将导致以下错误:
Argument of type '(result: Post[]) => void' is not assignable to parameter of type 'NextObserver<[Observable<Post>]> | ErrorObserver<[Observable<Post>]> | CompletionObserver<[...'.
Type '(result: Post[]) => void' is not assignable to type '(value: [Observable<Post>]) => void'.
所以我的问题是:
如何将一个Observables
的Array
“展平”成一个Array
?
getPosts
方法对应什么?它会加载特定用户的帖子吗? - Thierry Templier