Angular rxjs forkJoin嵌套在另一个可观察对象中

Angular rxjs forkJoin嵌套在另一个可观察对象中,angular,rxjs,Angular,Rxjs,有两组可观察的网络请求。 在解决了第一个可观察对象之后,我需要将多个可观察对象分叉连接起来。 但作为回报,我得到的不是数据而是订户 请检查一下提琴 一旦您订阅了一个可观察到的,它就开始执行并转变为订阅,您应该返回可观察到的,并使用switchMap来运行该可观察到的。请尝试以下操作: function gerData() { return init.pipe(switchMap(data=> forkJoin(array).pipe(map(arr=>arr.map(i

有两组可观察的网络请求。 在解决了第一个可观察对象之后,我需要将多个可观察对象分叉连接起来。 但作为回报,我得到的不是数据而是订户

请检查一下提琴

一旦您订阅了一个可观察到的,它就开始执行并转变为订阅,您应该返回可观察到的,并使用switchMap来运行该可观察到的。请尝试以下操作:

function gerData() {
  return init.pipe(switchMap(data=>
    forkJoin(array).pipe(map(arr=>arr.map(item=>item.data)))
  ));
}
一旦您订阅了一个可观察到的,它就开始执行并转变为订阅,您应该返回可观察到的,并使用switchMap来运行该可观察到的。请尝试以下操作:

function gerData() {
  return init.pipe(switchMap(data=>
    forkJoin(array).pipe(map(arr=>arr.map(item=>item.data)))
  ));
}
您可以使用mergeMap而不是map,返回订阅不会有帮助

无论我们在映射中返回什么,它都将是订阅的成功回调中接收到的值。我们无法从订阅对象检索值

在mergeMap中,我们返回一个Observable,该Observable将与父Observable合并,我们可以使用单个订阅获得合并Observable的值

import { forkJoin, of, timer } from "rxjs";
import { map, mergeMap } from "rxjs/operators";

let array = [of({ data: [1] }), of({ data: [2] })];
const init = of({ pages: 2 });

function gerData() {
  const observable = forkJoin(array);
  return init.pipe(
    mergeMap(data => {
      return observable.pipe(map(data => {
        const arr = [];
        data.forEach(x => {
          arr.push(...x.data);
        });
        console.log('array', arr);
        return arr;
      }));
    })
  );
}



gerData().subscribe((data) => {
  console.log('final data: ', data);
})
您可以使用mergeMap而不是map,返回订阅不会有帮助

无论我们在映射中返回什么,它都将是订阅的成功回调中接收到的值。我们无法从订阅对象检索值

在mergeMap中,我们返回一个Observable,该Observable将与父Observable合并,我们可以使用单个订阅获得合并Observable的值

import { forkJoin, of, timer } from "rxjs";
import { map, mergeMap } from "rxjs/operators";

let array = [of({ data: [1] }), of({ data: [2] })];
const init = of({ pages: 2 });

function gerData() {
  const observable = forkJoin(array);
  return init.pipe(
    mergeMap(data => {
      return observable.pipe(map(data => {
        const arr = [];
        data.forEach(x => {
          arr.push(...x.data);
        });
        console.log('array', arr);
        return arr;
      }));
    })
  );
}



gerData().subscribe((data) => {
  console.log('final data: ', data);
})

你可以这样做

function gerData() {
  const observable = forkJoin(array);
  return init.pipe(
    switchMap(() => observable),
    map(res => res.reduce((prev, next) => prev.concat(next.data), []))
  );
}

gerData().subscribe(data => {
  console.log("final data: ", data);
});

你可以这样做

function gerData() {
  const observable = forkJoin(array);
  return init.pipe(
    switchMap(() => observable),
    map(res => res.reduce((prev, next) => prev.concat(next.data), []))
  );
}

gerData().subscribe(data => {
  console.log("final data: ", data);
});

@SumitRidhal更新了答案。有道理。谢谢你的努力。@SumitRidhal更新了答案。有道理。谢谢你的努力。