Javascript 嵌套订阅并需要将所有值作为主体传递给API-Angular 6 RxJS

Javascript 嵌套订阅并需要将所有值作为主体传递给API-Angular 6 RxJS,javascript,angular,ecmascript-6,rxjs,flatmap,Javascript,Angular,Ecmascript 6,Rxjs,Flatmap,我正在开发一个表组件,表组件的数据将根据三个下拉值填充。我需要将所有三个值传递给API以获得所需的响应。我可以使用嵌套的订阅来实现它,这是一种非常糟糕的方法。但任何更改都会多次调用API。我怎样才能修好它?我发现的大多数示例仅用于获取最终订阅值,但在我的示例中,我需要这三个值。使用轻触和平面地图有什么建议吗 请给我一些建议 this._data.currentGroup.subscribe(bg => { this.bg = bg; this._d

我正在开发一个表组件,表组件的数据将根据三个下拉值填充。我需要将所有三个值传递给API以获得所需的响应。我可以使用嵌套的订阅来实现它,这是一种非常糟糕的方法。但任何更改都会多次调用API。我怎样才能修好它?我发现的大多数示例仅用于获取最终订阅值,但在我的示例中,我需要这三个值。使用
轻触
平面地图
有什么建议吗

请给我一些建议

    this._data.currentGroup.subscribe(bg => {
        this.bg = bg;

        this._data.currentUnit.subscribe(bu => {
            this.bu = bu;

            this._data.currentFunction.subscribe(jf => {
                this.jf = jf;

                this.apiService.getFunctionalData(this.bg, this.bu, this.jf)
                .subscribe(
                  (data) => {
                    console.log(data)
                  }
                );

            });
        });
    });
这就是我所做的

    this._data.currentGroup.pipe(
        tap(bg => this.bg = bg),
        flatMap(bu => this._data.currentUnit.pipe(
            tap(bu => this.bu = bu),
            flatMap(jf => this._data.currentFunction.pipe(
                tap(jf => this.jf = jf)
            ))
        ))
    ).subscribe();
这是我的
数据服务的一个示例。我在表组件的构造函数中将我的
dataservice
初始化为
\u data

    changeGroup(bg: string) {
      this.changeGroupData.next(bg);
    }

    private changeGroupData = new BehaviorSubject<string>('');
    currentChangeGroup = this.changeGroupData.asObservable();
changeGroup(bg:string){
this.changeGroupData.next(bg);
}
私有变更组数据=新行为主体(“”);
currentChangeGroup=this.changeGroupData.asObservable();
您可以使用组合这三个观测值,然后一次订阅所有观测值。一旦三个可观测值中的一个发生变化,它就会发出一个新值

combineLatest(this._data.currentGroup,
              this._data.currentUnit,
              this._data.currentFunction).subscribe(([bg, bu, jf]) => {
        // do stuff
      });

举个例子,看看我创建的这个。

现在就尝试一下。这很有效。我从这里开始学习Exmaple 1:如何从subscribe变量获取值?当我使用console.log(subscribe)时,它表示它是订阅者。我添加了一个示例。那有用吗?是的,金姆。这很有帮助。谢谢。