首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RXJS 5-当所有源发出时,从可观察到的数组中发出一个组合值。

RXJS 5-当所有源发出时,从可观察到的数组中发出一个组合值。
EN

Stack Overflow用户
提问于 2018-03-28 04:52:17
回答 1查看 677关注 0票数 0

我使用可观测的pipe方法合成多个可观测值,当数组中的所有可观测值发出时,我想发出一个最终的复合值。

代码语言:javascript
复制
import { apiSvc } from '../lib/api-service'

import { of as observableOf } from 'rxjs/observable/of'
import { map } from 'rxjs/operators'

const uris = [
  '/api/items/1',
  '/api/items/2',
  '/api/items/3'
]

observableOf(uris).pipe(
  // Map uris array to an array of observables.
  map((uris) => calls.map(uri) => apiSvc.get(uri) /* returns observable*/),
  // Perform magic and emit when all calls complete.
  magic()
)
.subscribe((results) => {
  console.log(results) // [{id: 1}, {id: 2}, {id: 3}]
})

我用forkJoin完成了这件事

代码语言:javascript
复制
import { forkJoin } from 'rxjs/observable/forkJoin'

observableOf(uris).pipe(
  // Map uris array to an array of observables.
  map((uris) => calls.map(uri) => apiSvc.get(uri)),
)
.subscribe((requests) => {
  // Emits when all request observables emit.
  forkJoin(requests).subscribe((results) => {
    console.log(results) // [{id: 1}, {id: 2}, {id: 3}]
  })
})

...but --我正在寻找一种不用嵌套subscribe调用就能在pipe链中完成它的方法。

zip运算符在某种程度上是可行的,但它似乎不适用于可观察到的数组。是否有一个像forkJoin一样工作并且可以与pipe一起使用的可访问运算符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-28 07:47:26

你们很亲密。您希望返回链中可观察到的forkJoined,并等待它与concatMap一起发布(mergeMap在这里也会工作)。

代码语言:javascript
复制
observableOf(uris)
  .pipe(
    // Map uris array to an array of observables.
    concatMap(uris => forkJoin(uris.map(uri => apiSvc.get(uri))),
  )
  .subscribe((responses) => {
    ...
  });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49526346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档