2017-03-13 13 views
1

TypeScriptのRXJSで遊んでいて、説明できない問題が発生しました。複数の文字列を出力するobservableがあります。RXJS:SwitchMapが文字列を1文字に予期せず変換する

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を適用したいですしたがって、switchMapとsubscribeの間のどこかで、文字列は明らかに文字に分解されます。

これはなぜ起こるのか誰かが説明できますか?

答えて

3

の代わりにmapを使用すると思います。

switchMapは実際には戻り値としてObservableInputを返します。これは文字列であり、文字列であり、配列として扱われ、単一の要素に分割されます。私はあなたがmap代わりのswitchMapが必要だと思う

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

ありがとうございました。 – fjc

1

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

しかし、より良い使用:あなたができるswitchMapを使用して期待どおりの結果を持っている

switchMapに渡された関数は、観測値または約束を返すことを期待しています。 "a" + strはありません。

関連する問題