Для веб-приложения, написанного с помощью Angular2 в TypeScript, мне нужно работать с RxJs Observable
s.
Как я никогда раньше не использовал rxjs, и я новичок в реактивном программировании в целом, у меня иногда возникают трудности с поиском правильного пути для выполнения определенных задач.
Теперь я столкнулся с проблемой. где мне нужно преобразовать Array<Observable<T>>
в Observable<Array<T>>
.
Я попытаюсь объяснить это на примере:
- У меня есть Observable
, который дает мне список Users
(Observable<Array<User>>
)
- The User
-класс имеет функцию getPosts
возвращающую Observable<Array<Post>>
.
- Мне нужно сопоставить Observable<Array<User>>
с Observable<Array<Post>>
, чтобы оценить все Post
s внутри функции onNext
.RxJs Массив наблюдаемого массива
можно легко сопоставить с Observable<Array<User>>
с Observable<Array<Observable<Array<Post>>>>
использованием
map((result : Array<User>) => result.map((user : User) => user.getPosts()))
анс можно расплющить в Array<Array<Post>>
в Array<Post>
.
Однако я просто не могу найти правильный путь, чтобы картированию 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'? Загружает ли он сообщения определенного пользователя? –