Javascript 为什么switch可以用作实例操作符,而merge和concat可以';T
我们有3个常用的运算符,它们处理可观察序列-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
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()
的方法相同?对前面的问题有何评论\