TypeScriptでAngular2で書かれたWebアプリケーションでは、RxJs Observable
を使用する必要があります。
以前はrxjsを使ったことがなかったので、私は一般的にリアクティブプログラミングに取り掛かっていませんでした。時には、いくつかの特定のことを行う正しい方法を見つけることが困難な場合があります。
私は今問題に直面しています。 Array<Observable<T>>
をObservable<Array<T>>
に変換する必要があります。
私は一例でそれを説明してみましょう:
- User
級はObservable<Array<Post>>
を返す関数getPosts
を持っている - 私は私のUsers
(Observable<Array<User>>
)のリストを与えるObservable
、
を持っています。
onNext
機能内のPost
をすべて評価するには、Observable<Array<User>>
をObservable<Array<Post>>
にマップする必要があります。配列に観測可能なRxJs配列
Iは容易私がArray<Post>
にArray<Array<Post>>
を平坦化することができる
map((result : Array<User>) => result.map((user : User) => user.getPosts()))
ANSを用いObservable<Array<Observable<Array<Post>>>>
にObservable<Array<User>>
からマッピングすることができます。
Observable<Array<Observable<Array<Post>>>>
をObservable<Array<Array<Post>>>
にマップする正しい方法を見つけることができませんでした。今までcombineLatest
機能とflatMap
を使用しました。
私にはうまくいくように思えましたが、私が使ったエディタ(Atomエディタ)はエラーを表示しませんでした。しかし、今ではNetbeansを使用していますが、このコードではエラーが表示されます。また、 "tsc"を使用してコードをコンパイルすると、エラーが発生します。
次のようになります。
Argument of type '(result: Post[]) => void' is not assignable to parameter of type 'NextObserver<[Observable<Post>]> | ErrorObserver<[Observable<Post>]> | CompletionObserver<[...'.
Type '(result: Post[]) => void' is not assignable to type '(value: [Observable<Post>]) => void'.
は、だから私の質問は:
どのように私はArray
にObservables
のArray
を "フラット化" することができますか?
'getPosts'メソッドは何に対応していますか?特定のユーザーの投稿を読み込みますか? –