簡體   English   中英

當 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取消了prev訂閱。

這個問題的任何解決方案。

基本上我想對狀態進行輪詢,通話可能需要時間

您可以使用mergeMapexhaustMap

不同之處在於:

  • mergeMap將每 5 秒訂閱一次,而不會取消訂閱(取消)之前的 API 調用。 這意味着您可以有許多並發訂閱。
  • 除非當前 API 調用已完成, exhaustMap不會再次訂閱,但它也不會取消正在運行的 API 調用。 在這種情況下,您可能需要在成功響應后最多等待 5 秒,直到它重新訂閱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM