Typescript RxJs可观测到的阵列到阵列

Typescript RxJs可观测到的阵列到阵列,typescript,angular,rxjs,observable,Typescript,Angular,Rxjs,Observable,对于在TypeScript中使用Angular2编写的Web应用程序,我需要使用RxJsObservables. 由于我以前从未使用过rxjs,而且我对一般的反应式编程还不熟悉,所以有时我很难找到正确的方法来做一些特定的事情。 我现在面临一个问题。其中,我必须将数组转换为可观察的 我将试着用一个例子来解释: -我有一个可观察的,它给了我一个用户列表(可观察的) -User-类有一个函数getPosts返回一个可观察的 -我需要将Observable映射到Observable以评估onNext函数

对于在TypeScript中使用Angular2编写的Web应用程序,我需要使用RxJs
Observable
s.
由于我以前从未使用过rxjs,而且我对一般的反应式编程还不熟悉,所以有时我很难找到正确的方法来做一些特定的事情。
我现在面临一个问题。其中,我必须将
数组
转换为
可观察的

我将试着用一个例子来解释:
-我有一个
可观察的
,它给了我一个
用户列表
可观察的

-
User
-类有一个函数
getPosts
返回一个
可观察的

-我需要将
Observable
映射到
Observable
以评估
onNext
函数中的所有
Post
s

我可以使用
map((结果:数组)=>result.map((用户:用户)=>user.getPosts())

我可以将
数组
展平为
数组

然而,我就是找不到正确的方法将
可观察的
映射到
可观察的

到目前为止,我将
combinelatetest
函数与
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'.  
类型的参数'(结果:Post[])=>void'不可分配给类型为'NextObserver | ErrorObserver | CompletionObserver void'的参数'(值:[可观察]=>void'。
所以我的问题是:

如何将
可观察对象的
数组
展平为
数组

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

如果您想加载所有

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

您可以在所需的rxjs方法上使用函数apply,如下所示:

const source1=Rx.可观测间隔(100)
.map(函数(i){return'First:'+i;});
常数源2=可观测接收间隔(150)
.map(函数(i){return'Second:'+i;});
const observesarray=[source1,source2];
常数源=Rx.Observable.CombineTest
应用(这个,可观察到的排列)
/*或者,您可以不使用“应用”来编写:
常数源=Rx.可观测
.CombineTest(…可观察阵列)
.take(4)
*/
来源:订阅(
(回应)=>{
控制台日志(响应);
}
)

在这个可观测数组上使用forkJoin,那么它将是数组的可观测对象。

下面是一些使用rxjs@6.3.3

import { of, forkJoin} from 'rxjs';
import { Observable } from 'rxjs'

const source:Array<Observable<String>> = [of('A'), of('B'), of('C') ];

forkJoin(source).subscribe( (x)=> console.log(x))
从'rxjs'导入{of,forkJoin};
从“rxjs”导入{observatable}
常量源:数组=[of('A')、of('B')、of('C')];
forkJoin(源).subscribe((x)=>console.log(x))

使用
toArray()


getPosts
方法对应什么?它是否加载特定用户的帖子?是的,
getPosts()
返回一个
可观察的
。所以我想这就是我想要的。我会尽快试用,如果有效的话会告诉你。谢谢你。我只想用
forkJoin
替换
combinelatetest
。谢谢!我想这应该可以,但我现在还是坚持使用
forkJoin
import { of, forkJoin} from 'rxjs';
import { Observable } from 'rxjs'

const source:Array<Observable<String>> = [of('A'), of('B'), of('C') ];

forkJoin(source).subscribe( (x)=> console.log(x))
range(0, 7).pipe(
  concatMap(v => of(`day_${v}`)),
  toArray() // here
).subscribe(a => {
  console.log(a); // ['day_0', 'day_1', ... 'day_6']
});