【发布时间】:2021-07-08 17:54:31
【问题描述】:
对于在 TypeScript 中使用 Angular2 编写的 Web 应用程序,我需要使用 RxJs Observables。
由于我以前从未使用过 rxjs,而且我对响应式编程很陌生,所以有时我很难找到正确的方法来做一些特定的事情。
我现在面临一个问题。我必须将Array<Observable<T>> 转换为Observable<Array<T>>。
我将尝试用一个例子来解释它:
- 我有一个
Observable,它为我提供了Users(Observable<Array<User>>) 的列表 -
User类有一个函数getPosts返回一个Observable<Array<Post>>。 - 我需要将
Observable<Array<User>>映射到Observable<Array<Post>>以评估onNext函数内的所有Posts。
我可以很容易地从Observable<Array<User>>映射到Observable<Array<Observable<Array<Post>>>>使用map((result : Array<User>) => result.map((user : User) => user.getPosts()))
我可以将Array<Array<Post>> 展平为Array<Post>。
但是我只是找不到将Observable<Array<Observable<Array<Post>>>> 映射到Observable<Array<Array<Post>>> 的正确方法
到目前为止,我将combineLatest 函数与flatMap 一起使用。
对我来说,它似乎有效,我使用的编辑器(Atom 编辑器)没有显示任何错误。但是现在我使用 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'.
所以我的问题是:
我怎样才能将Array 的Observables“扁平化”为Array?
【问题讨论】:
-
getPosts方法对应什么?它会加载特定用户的帖子吗?
标签: typescript angular rxjs observable