小编Pat*_*cay的帖子

Rxjs - 使用 observables 作为值重新映射对象

我得到了一个这样的可观察对象:

  const original = Observable.of({
    a: this.http.get('https://jsonplaceholder.typicode.com/todos/11'),
    b: this.http.get('https://jsonplaceholder.typicode.com/todos/22'),
    c: this.http.get('https://jsonplaceholder.typicode.com/todos/33')
  });
Run Code Online (Sandbox Code Playgroud)

我需要解析内部 observables 并在订阅处理程序中得到类似的东西:

  {
    a: ResponseFromServer,
    b: ResponseFromServer,
    c: ResponseFromServer,
  }
Run Code Online (Sandbox Code Playgroud)

我应该如何解决这个问题?

谢谢。

编辑:我已经想通了,请阅读下文。

似乎没有多少人知道 *Map 运算符曾经有一个称为resultSelector第二个参数的东西。现在在 rxjs v6 中,你可以用 做同样的事情inner map,让我来告诉你。

const original = Observable.of({
    a: this.http.get('https://jsonplaceholder.typicode.com/todos/11'),
    b: this.http.get('https://jsonplaceholder.typicode.com/todos/22'),
    c: this.http.get('https://jsonplaceholder.typicode.com/todos/33')
});

const transformed = original.pipe(
    mergeMap(sourceValue => 
        forkJoin(_.values(sourceValue)).pipe(map(resolvedHttpRequests => {
            // here you have access to sourceValue as well as resolvedHttpRequests so you can do manual join to match the data.
        })) …
Run Code Online (Sandbox Code Playgroud)

reactive-programming object-properties rxjs reactivex angular

5
推荐指数
1
解决办法
1572
查看次数