RXJS:SwitchMap意外地将字符串转换为单个字符

fjc*_*fjc 9 observable rxjs typescript

我正在玩RXJS for TypeScript,偶然发现了一个我自己无法解释的问题。我有一个observable发出多个字符串的。然后,我想将其应用于switchMap每个字符串前面的“ a”:

var o = Observable.create((observer) => {
    observer.next("hi")
    observer.next("bla")
})

o.switchMap(str => "a" + str).subscribe(str => console.log(str))
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

ahi
abla
Run Code Online (Sandbox Code Playgroud)

实际输出:

a
h
i
a
b
l
a
Run Code Online (Sandbox Code Playgroud)

因此,在switchMap和subscription之间的某个位置,字符串显然被分解为字符。

有人可以解释为什么会这样吗?

ols*_*lsn 10

我想您打算使用map而不是switchMap

switchMap实际上期望一个ObservableInput作为返回值的值,在您的情况下,该值是一个字符串,该值又被视为一个数组,因此分成多个元素。

要获得预期的结果,switchMap您可以:

o.switchMap(str => Observable.of("a" + str))
    .subscribe(str => console.log(str));
Run Code Online (Sandbox Code Playgroud)

但更好地使用:

o.map(str => "a" + str)
    .subscribe(str => console.log(str))
Run Code Online (Sandbox Code Playgroud)

管道的新语法:

o.pipe(
    map(str => "a" + str)
).subscribe(str => console.log(str))
Run Code Online (Sandbox Code Playgroud)