rxjs 并发后合并流

发布于 2022-09-06 00:39:25 字数 699 浏览 15 评论 0

需求
异步得到一个列表,返回的是一个数组[1,2,3,4,5]
再次异步并发请求携带数组中参数
返回[2,4,6,8,10]

问题
如何将第一次异步请求得到的参数并发出去,最后合并成一个流?

function mock () {
    return new Promise(res => {
      setTimeout(_ => {
        res({
          code: 1,
          ids: [
            1, 2, 3, 4, 5
          ]
        })
      }, 200)
    })
  }
function asyncData (id) {
    console.log(id)
    return new Promise(res => {
      setTimeout(_ => {
        res({
          id: id * 2
        })
      }, 300)
    })
  }
//我的错误方式
Rx.Observable.from(mock())
.map(v => v.ids)
.mergeMap(v => Rx.Observable.from(v.map(id=>asyncData(id))))
.subscribe(v => {
    console.log(v)
  })

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

朮生 2022-09-13 00:39:25

按你的需求返回[2,4,6,8,10]应该是:

Rx.Observable.from(mock())
  .mergeMap(data => Rx.Observable.from(data.ids).mergeMap(id => Rx.Observable.fromPromise(asyncData(id)).map(data => data.id)))
  .subscribe(v => console.log(v));
叶落知秋 2022-09-13 00:39:25
from(mock())
  .pipe(
    switchMap(v => v.ids),
    mergeMap(id => from(asyncData(id))),
    map(data => data.id),
    toArray(),
  )
  .subscribe(console.log)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文