Rxjs 阻止订阅中的订阅

Rxjs prevent subscribe in subscribe

我有一组对象。我需要获取 ids 数组,然后调用 2 个 API,然后关闭模态 window.

我的代码是:

from(this.alerts)
      .pipe(map(alert => alert._id))
      .subscribe(alertIds => zip(
          this.alertApi.someCall1(alertIds, ...),
          this.alertApi.someCall2(alertIds, ...),
        ).subscribe(() => {
          this.activeModal.close();
        }),
      );

你知道在 subscribe 中防止 subscribe 吗?

使用 switchMap rxjs 运算符避免嵌套订阅。

from(this.alerts)
      .pipe(
         map(alert => alert._id),
         switchMap(alertIds => zip(
           this.alertApi.someCall1(alertIds, ...),
           this.alertApi.someCall2(alertIds, ...)
         ))
      )
      .subscribe(() => {
          this.activeModal.close();
      );

可以找到有关 switchMap 运算符的更多信息 here

您可以使用 forkJoin,这与 Promise.allswitchMap 类似。

See also: the RxJS docs, specifically example 6, which is similar to your situation.

from(this.alerts)
    .pipe(
        switchMap(alert =>
            forkJoin(
                this.alertApi.someCall1(alert._id),
                this.alertApi.someCall2(alert._id)
            )
        )
    )
).subscribe(() => {
   this.activeModal.close(); 
});

请注意,仅当所有内部可观察对象都完成时,生成的可观察对象才会发出。