使用rxjs mergeMap()进行并发请求是连续的

使用rxjs mergeMap()进行并发请求是连续的,rxjs,Rxjs,我有两个应该并发运行的可观察对象,我现在的代码似乎是按顺序运行这两个流。StreamA$完成,然后StreamB$开始,这与预期不符。如何使流与mergeMap并发运行 ngOnInit() { this.streamA$ = this.streamService.getStream(1); this.streamB$ = this.streamService.getOtherStream(2); } click() { console.log('clicked'); this

我有两个应该并发运行的可观察对象,我现在的代码似乎是按顺序运行这两个流。StreamA$完成,然后StreamB$开始,这与预期不符。如何使流与mergeMap并发运行

ngOnInit() {
  this.streamA$ = this.streamService.getStream(1);
  this.streamB$ = this.streamService.getOtherStream(2);
}

click() {
  console.log('clicked');
  this.streamA$
    .pipe(
      mergeMap(streamData => {
        console.log(this.streamB$);
        console.log(streamData);
        return this.streamB$;
      })         )
      .subscribe(data => {
        console.log(data);
      });
}

mergeMap
每次外部可观察对象发出值时,都订阅内部可观察对象。的确,如果外部可观察对象发出多个值,则内部可观察对象将同时订阅,但它将始终转到外部->内部。如果您试图合并这两个观察值,请尝试以下方法:

merge(this.streamA$,this.streamB$).subscribe();

这将创建一个单一的可观察的,它结合了其他两个的发射。这听起来像是你要找的吗?

你要找的是forkJoin、zip或merge中的一种。阅读它们上的文档以了解差异。streamA完成后,streamB不会“开始”。每次streamA发出某种东西时,它都会开始。看见我同意Ingo。可能是重复的哦,我现在明白了。它处理流输出concurrentlyOnce合并。无论流a或流B有完整或不完整的请求,都可以检查吗?所以,如果我将它合并到变量mergedStream$中,我可以用它来控制A和B的使用吗?我不确定我是否理解这个问题。当所有内部可观察对象完成时,外部(合并)可观察对象完成。如果其中任何一个出错,整个事情都会出错。