我正在玩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之间,字符串显然会被分解为字符。
有人可以解释为什么会这样吗?
答案 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
不是。