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

时间:2017-03-13 17:58:30

标签: typescript rxjs observable

我正在玩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))

我的预期输出:

ahi
abla

实际输出:

a
h
i
a
b
l
a

所以在switchMap和subscribe之间,字符串显然会被分解为字符。

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

2 个答案:

答案 0 :(得分:5)

我猜你的意思是使用map代替switchMap

switchMap实际上需要ObservableInput作为返回值,在您的情况下是一个字符串,而后者又被视为一个数组,因此被拆分为单个元素。

要使用switchMap获得预期结果,您可以执行以下操作:

o.switchMap(str => Observable.of("a" + str))
    .subscribe(str => console.log(str));

但更好用:

o.map(str => "a" + str)
    .subscribe(str => console.log(str))

答案 1 :(得分:1)

我认为您需要map而不是switchMap

传递给switchMap的函数希望返回一个observable或promise。 "a" + str不是。