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