Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么switch可以用作实例操作符,而merge和concat可以';T_Javascript_Rxjs - Fatal编程技术网

Javascript 为什么switch可以用作实例操作符,而merge和concat可以';T

Javascript 为什么switch可以用作实例操作符,而merge和concat可以';T,javascript,rxjs,Javascript,Rxjs,我们有3个常用的运算符,它们处理可观察序列-mergeMap、concatMap、和switchMap。假设我有以下观察值: const os = [ Rx.Observable.interval(400).take(3).map((i) => `a${i}`), Rx.Observable.interval(400).take(3).map((i) => `b${i}`), Rx.Observable.interval(400).take(3).map((i

我们有3个常用的运算符,它们处理可观察序列-
mergeMap
concatMap
、和
switchMap
。假设我有以下观察值:

const os = [
    Rx.Observable.interval(400).take(3).map((i) => `a${i}`),
    Rx.Observable.interval(400).take(3).map((i) => `b${i}`),
    Rx.Observable.interval(400).take(3).map((i) => `c${i}`)
];
Rx.Observable.interval(1000).take(os.length).map((i) => os[i]).switch().subscribe((v) => console.log(v));
Rx.Observable.merge(os[0], os[1], os[2]).subscribe((v) => console.log(v));
Rx.Observable.concat(os[0], os[1], os[2]).subscribe((v) => console.log(v));
开关
运算符可用于处理一系列可观察对象:

const os = [
    Rx.Observable.interval(400).take(3).map((i) => `a${i}`),
    Rx.Observable.interval(400).take(3).map((i) => `b${i}`),
    Rx.Observable.interval(400).take(3).map((i) => `c${i}`)
];
Rx.Observable.interval(1000).take(os.length).map((i) => os[i]).switch().subscribe((v) => console.log(v));
Rx.Observable.merge(os[0], os[1], os[2]).subscribe((v) => console.log(v));
Rx.Observable.concat(os[0], os[1], os[2]).subscribe((v) => console.log(v));
如果使用
switchMap
从地图生成的观测序列:

Rx.Observable.interval(1000).take(os.length).switchMap((i) => os[i]).subscribe((v) => console.log(v));
另外两个操作符
mergeMap
concatMap
也可以处理从
map
生成的观察值。我也可以用它们来组合观测值:

const os = [
    Rx.Observable.interval(400).take(3).map((i) => `a${i}`),
    Rx.Observable.interval(400).take(3).map((i) => `b${i}`),
    Rx.Observable.interval(400).take(3).map((i) => `c${i}`)
];
Rx.Observable.interval(1000).take(os.length).map((i) => os[i]).switch().subscribe((v) => console.log(v));
Rx.Observable.merge(os[0], os[1], os[2]).subscribe((v) => console.log(v));
Rx.Observable.concat(os[0], os[1], os[2]).subscribe((v) => console.log(v));
但我的问题是,为什么不能像
开关
那样使用它们来处理可观测数据流

Rx.Observable.interval(1000).take(os.length).map((i) => os[i]).merge().subscribe((v) => console.log(v));
Rx.Observable.interval(1000).take(os.length).map((i) => os[i]).concat().subscribe((v) => console.log(v));
是什么阻碍了实施?我很想知道潜在的限制


提前谢谢

我想我已经在这里看到了完全相同的问题。您不会以这种方式使用
concat()
merge()
,因为已经有
concatAll()
mergeAll()
操作符来执行与您所需完全相同的操作

同样,也没有
switchAll()
开关(obs1、obs2)
switchAll()
没有意义,因为
switch()
已经可以处理高阶可观察对象了。

然后就没有了
开关(obs1,obs2)
,因为您可以简单地使用
.merge(obs1,obs2).switch()
来实现相同的功能。

我想我已经在这里看到了完全相同的问题。您不会以这种方式使用
concat()
merge()
,因为已经有
concatAll()
mergeAll()
操作符来执行与您所需完全相同的操作

同样,也没有
switchAll()
开关(obs1、obs2)
switchAll()
没有意义,因为
switch()
已经可以处理高阶可观察对象了。

然后没有
开关(obs1,obs2)
,因为你可以简单地使用
.merge(obs1,obs2).switch()
来实现同样的功能。

我想这是一个相关的问题:谢谢,所以基本上
map().mergeAll()
mergeMap
是一样的吗?与
map()相同。switch()
switchMap()
相同?对之前的问题有何评论?\n我想这是一个相关的问题:谢谢,所以基本上
map()。mergeAll()
mergeMap
相同?与
map().switch()
的方法相同。switch()与
switchMap()
的方法相同?对前面的问题有何评论\