1. ホーム
  2. javascript

[解決済み] なぜflatMapが必要なのか?

2022-11-09 07:18:12

質問

RxJSを使い始めているのですが、この例でなぜ flatMap または concatAll 配列の配列はどこにあるのでしょうか?

var requestStream = Rx.Observable.just('https://api.github.com/users');

var responseMetastream = requestStream
  .flatMap(function(requestUrl) {
    return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
  });

responseMetastream.subscribe(url => {console.log(url)})

どなたか視覚的に説明できる方がいらっしゃれば、大変助かります。

どのように解決するのですか?

を見始めたとき、私は Rxjs もその石につまずきました。役に立ったのは次のようなことです。

  • reactivex.ioのドキュメント。例えば flatMap : http://reactivex.io/documentation/operators/flatmap.html
  • rxmarbles からのドキュメント。 http://rxmarbles.com/ . あなたは flatMap を探す必要があります。 mergeMap を代わりに見なければなりません(別の名前)。
  • は、あなたが見逃していたRxの入門書です。 https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 . これは非常に似たような例を扱っています。特に、プロミスが1つの値だけを出力するobservableに似ているという事実を扱っています。
  • 最後に、RxJavaからの型情報を見てみましょう。Javascript が型付けされていないことは、ここでは役に立ちません。基本的に、もし Observable<T> が型Tの値をプッシュする観測可能なオブジェクトを表すなら、次に flatMap 型の関数を取ります。 T' -> Observable<T> を引数として取り Observable<T> . map は型の関数を取ります。 T' -> T を返し Observable<T> .

    あなたの例に戻って、あなたはURL文字列から約束を生成する関数を持っています。そこで T' : string で、そして T : promise . そして、先ほどの話から promise : Observable<T''> ということで T : Observable<T''> である。 T'' : html . そのプロミス生成関数を map に置くと、以下のようになります。 Observable<Observable<T''>> であるべきなのに Observable<T''> である場合、observable からは html の値を出したい。 flatMap の結果を平坦にする(観測可能な層を取り除く)ため、このように呼ばれます。 map . あなたのバックグラウンドによっては、これは中国語かもしれませんが、ここからの情報をタイプし、図面を書くことで、すべてが明確になりました。 http://reactivex.io/documentation/operators/flatmap.html .