gpt4 book ai didi

typescript - RxJs Array of Observable 到 Observable of Array

转载 作者:太空狗 更新时间:2023-10-29 16:52:24 25 4
gpt4 key购买 nike

对于在 TypeScript 中使用 Angular2 编写的 Web 应用程序,我需要使用 RxJs Observable s.
由于我以前从未使用过 rxjs,而且我对响应式编程总体上还是个新手,所以有时我很难找到正确的方法来做一些特定的事情。
我现在面临一个问题。我必须在哪里转换 Array<Observable<T>>进入 Observable<Array<T>> .
我将尝试用一个例子来解释它:

  • 我有一个 Observable ,这给了我 Users 的列表( Observable<Array<User>> )
  • User -class 有一个函数 getPosts返回 Observable<Array<Post>> .
  • 我需要映射 Observable<Array<User>>Observable<Array<Post>>评估所有 PostonNext 里面功能。

我可以轻松地从 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>>>
直到现在我使用 combineLatestflatMap一起发挥作用.
对我来说,它似乎有效,而且我使用的编辑器(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'.

所以我的问题是:
我怎样才能“展平” ArrayObservables进入 Array

最佳答案

flatMap 运算符允许这样做。我不完全明白你想做什么,但我会尽力提供一个答案......

如果你想加载所有的

getPostsPerUser() {
return this.http.get('/users')
.map(res => res.json())
.flatMap((result : Array<User>) => {
return Observable.forkJoin(
result.map((user : User) => user.getPosts());
});
}

Observable.forkJoin 允许您等待所有可观察对象接收到数据。

上面的代码假定 user.getPosts() 返回一个可观察...

这样,您将收到一系列帖子:

this.getPostsPerUser().subscribe(result => {
var postsUser1 = result[0];
var postsUser2 = result[1];
(...)
});

关于typescript - RxJs Array of Observable 到 Observable of Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com