【问题标题】:RXJS: SwitchMap converts string into single characters unexpectedlyRXJS:SwitchMap 意外将字符串转换为单个字符
【发布时间】:2017-08-03 20:48:15
【问题描述】:

我正在为 TypeScript 使用 RXJS,偶然发现了一个我无法解释的问题。我有一个发出多个字符串的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 之间的某个地方,字符串显然被分解成字符。

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

【问题讨论】:

    标签: typescript rxjs observable


    【解决方案1】:

    我猜你的意思是使用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))
    

    带有管道的新语法:

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

    【讨论】:

      【解决方案2】:

      我认为您需要map 而不是switchMap

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 2013-10-21
        • 2012-11-24
        • 1970-01-01
        • 2012-07-26
        • 2018-04-29
        • 2020-09-30
        相关资源
        最近更新 更多