gpt4 book ai didi

javascript - 为什么 switch 可以用作实例运算符,而 merge 和 concat 不能

转载 作者:行者123 更新时间:2023-12-01 03:22:09 24 4
gpt4 key购买 nike

我们有 3 个常用的运算符与 Observables 序列一起使用 - mergeMapconcatMapswitchMap。假设我有以下可观察值:

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}`)
];

switch 运算符可用于处理一系列可观察值:

Rx.Observable.interval(1000).take(os.length).map((i) => os[i]).switch().subscribe((v) => console.log(v));

如果使用 switchMap 从 map 生成此可观察序列,它也可以工作:

Rx.Observable.interval(1000).take(os.length).switchMap((i) => os[i]).subscribe((v) => console.log(v));

另外两个运算符 mergeMapconcatMap 也可以处理从 map 生成的可观察值。我还可以使用它们来组合可观察值:

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));

但我的问题是为什么它们不能像 switch 一样用于处理可观察流?

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()switch(obs1, obs2)switchAll() 没有意义,因为 switch() 已经可以处理高阶 Observables。
那么就没有 switch(obs1, obs2) 因为您可以简单地使用 .merge(obs1, obs2).switch() 来实现相同的目的。

关于javascript - 为什么 switch 可以用作实例运算符,而 merge 和 concat 不能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45119166/

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