【问题标题】:Access to observable in Rxjs Forkjoin在 Rxjs Forkjoin 中访问 observable
【发布时间】:2018-10-15 11:28:39
【问题描述】:

所以我有一个我正在应用forkJoin 操作的可观察对象列表。我想知道响应数组中的每个对象指的是哪个 observable。

let observables = ...//array of observables
forkJoin(observables).subscribe(responses=>{
  responses.forEach(response=>{
    //figure out what observable this response corresponds to
  });
});

所以基本上这是在我收到 http 响应后使用请求参数之一。理想情况下,我可以修改来自服务器的响应并在响应中传递一些属性。但我目前没有那个选项。关于订阅响应后如何访问请求对象的任何想法?

【问题讨论】:

  • 索引始终相同,因此您知道Nth 源产生Nth 响应。
  • 我想我能做到。不会有更清洁的解决方案吗?不喜欢指数比较。感谢您的帮助!
  • 我不这么认为。正如您所说,您可以将每个响应映射到一些辅助对象,这可能是最简单的解决方案。

标签: angular typescript rxjs observable


【解决方案1】:

你也可以这样试试。

let observables = [of(1), of(2), of(3)];

forkJoin(observables)
    .subscribe(
        ([typeData1, typeData2, typeData3]) => {
            // typeData1 => 1st observable result
            // typeData2 => 2nd observable result
            // typeData3 => 3rd observable result
            this.isLoaded = true;
        }
    );

对于动态可观察数组,

let observables = [of(1), of(2), of(3), of(4)];

forkJoin(observables)
  .subscribe(
    ([...typeDataArr]) => {
        console.log(typeDataArr);
    }
  );

【讨论】:

  • 问题是我不会提前知道有多少 observables。
  • 更新了答案。
【解决方案2】:
let observables = getMyObservables();

forkJoin(observables).subscribe(responses=>{
    responses.forEach(response=>{
       //figure out what observable this response corresponds to
       console.log(response.someKindOfIdentifier);
    });
});


getMyObservables() {
  return this.http.get('blah_blah_blah').pipe(map(response => {
    originalResponse: response,
    someKindOfIdentifier: WHATEVER_YOU_WANT
  });
}

【讨论】:

  • 我在 API 响应中没有与请求对应的标识符,正如我在 OP 中提到的那样。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 2021-03-25
  • 2018-12-06
  • 2021-03-27
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2020-02-26
相关资源
最近更新 更多