Đối với một ứng dụng Web được viết bằng Angular2 trong TypeScript, tôi cần làm việc với RxJs Observable
s.
Vì tôi chưa bao giờ sử dụng rxjs trước đây và tôi mới làm quen với chương trình hoạt động phản ứng nói chung, đôi khi tôi gặp một số khó khăn khi tìm đúng cách để thực hiện một số điều cụ thể.
Tôi hiện đang gặp sự cố. nơi tôi phải chuyển đổi một số Array<Observable<T>>
thành một số Observable<Array<T>>
.
tôi sẽ cố gắng giải thích nó với một ví dụ:
- Tôi có một Observable
, mà mang lại cho tôi một danh sách các Users
(Observable<Array<User>>
)
- Các User
đẳng cấp có chức năng getPosts
trả lại một Observable<Array<Post>>
.
- Tôi cần lập bản đồ số Observable<Array<User>>
đến một số Observable<Array<Post>>
để đánh giá tất cả các Post
trong hàm onNext
.RxJs Array of Observable to Array
tôi có thể dễ dàng lập bản đồ từ Observable<Array<User>>
để Observable<Array<Observable<Array<Post>>>>
sử dụng
map((result : Array<User>) => result.map((user : User) => user.getPosts()))
ans tôi có thể san bằng một Array<Array<Post>>
thành một Array<Post>
.
Tuy nhiên, tôi không thể tìm được cách chính xác để ánh xạ Observable<Array<Observable<Array<Post>>>>
thành Observable<Array<Array<Post>>>
Cho đến bây giờ, tôi đã sử dụng chức năng combineLatest
cùng với flatMap
.
Đối với tôi, nó dường như hoạt động và trình soạn thảo tôi đã sử dụng (trình chỉnh sửa Atom) không hiển thị bất kỳ lỗi nào. Tuy nhiên bây giờ tôi sử dụng Netbeans, trong đó cho tôi thấy một lỗi trong mã này. Cũng biên dịch mã bằng cách sử dụng "tsc" dẫn đến lỗi.
Việc xem xét như thế này:
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'.
Vì vậy, câu hỏi của tôi là:
Làm thế nào tôi có thể "làm phẳng" một Array
của Observables
thành một Array
?
Phương thức 'getPosts' tương ứng với điều gì? Liệu nó tải các bài viết của một người dùng cụ thể? –