当 observable 花费更多时间时不调用 switchMap 的订阅

Subscription for switchMap not called when observable takes more time

startPolling() {
timer(1, 5000).pipe(
  switchMap(() => this.gatewayService.get(this.id)),
  retry(),
  share(),
  takeUntil(this.stopPolling)
).subscribe((gateway) => {
  this.status = gateway.status;
  this.stopPollingIfImageDownloaded();
});

如果 gatewayService.get 调用超过 5 秒,上述代码中的订阅将不起作用。 所以 switchMap 取消了上一个订阅。

这个问题的任何解决方案。

基本上我想轮询状态,调用可能需要时间

您可以使用 mergeMapexhaustMap

区别在于:

  • mergeMap 将每 5 秒订阅一次,而不会取消订阅(取消)之前的 API 调用。这意味着您可以有多个并发订阅。
  • exhaustMap 不会再次订阅,除非当前的 API 调用已经完成,但它也不会取消 运行 API 调用。在这种情况下,您可能需要在成功响应后最多等待 5 秒,直到 re-subscribes.