Per un'applicazione Web scritta con Angular2 in TypeScript, ho bisogno di lavorare con RxJs Observable
s.
Come non ho mai usato rxjs prima e sono nuovo alla programmazione reattiva in generale, a volte ho qualche difficoltà a trovare il modo giusto per fare alcune cose specifiche.
Ora sto affrontando un problema. dove devo convertire un Array<Observable<T>>
in un Observable<Array<T>>
.
Cercherò di spiegarlo con un esempio:
- Ho un Observable
, che mi dà un elenco di Users
(Observable<Array<User>>
)
- Il User
di classe ha una funzione getPosts
restituzione di un Observable<Array<Post>>
.
- Ho bisogno di mappare lo Observable<Array<User>>
su un Observable<Array<Post>>
per valutare tutti i Post
s all'interno della funzione onNext
.RxJs Matrice di Observable to Array
posso facilmente mappa da Observable<Array<User>>
a Observable<Array<Observable<Array<Post>>>>
utilizzando
map((result : Array<User>) => result.map((user : User) => user.getPosts()))
ans posso appiattire un Array<Array<Post>>
in un Array<Post>
.
Tuttavia non riesco proprio a trovare il modo corretto di mappare il Observable<Array<Observable<Array<Post>>>>
in un Observable<Array<Array<Post>>>
fino ad ora ho usato la funzione combineLatest
insieme flatMap
.
A me sembra funzionare e l'editor che ho usato (editor Atom) non ha mostrato alcun errore. Comunque ora uso Netbeans, che mi mostra un errore in questo codice. Anche compilare il codice usando "tsc" provoca errori.
L'aspetto simile a questo:
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'.
Quindi la mia domanda è:
Come posso "appiattire" un Array
di Observables
in un Array
?
A cosa corrisponde il metodo 'getPosts'? Carica i post di un utente specifico? –