3

配列に似ていflatten([1, 2 [3, 4], [5, 6]]) === [1, 2, 3, 4, 5, 6]ます。

rxjs オブザーバブルでこれを実行したいと思います。

const test$ = Rx.Observable.from(
    [1, 2, Rx.Observable.from([3, 4]), 5, Rx.Observable.from([6, 7])]
).mergeAll()

test$.subscribe(x => console.log(x)) //I want to output 1, 2, 3, 4, 5, 6, 7

mergeAll は機能せず、エラーがスローされます。

これは非常に汚い解決策です:

const inElegant$ = Rx.Observable.merge(
  test$.filter(x => x instanceof Rx.Observable).mergeAll(),
  test$.filter(x => !(x instanceof Rx.Observable))
)

inElegant$.subscribe(x => console.log(x));

これに対するより良い解決策はありますか?

Jsbin http://jsbin.com/vohizoqiza/1/edit?js,console

4

3 に答える 3

1

私は個人的toObservableにこれらの場合に変換関数を使用します。その関数はオブザーバブルを変更せずに残し、他のタイプをオブザーバブルにラップします( with Rx.Observable.return)。したがって、次のように使用されます。

const test$ = Rx.Observable.from(
    [1, 2, Rx.Observable.from([3, 4]), 5, Rx.Observable.from([6, 7])]
).map(toObservable).mergeAll()

それはあなたがしていることに近いですが、他のコンテキストで再利用できる別の関数にパッケージ化すると便利であることがわかりました。

于 2016-05-29T14:24:34.403 に答える