[英]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訂閱。
這個問題的任何解決方案。
基本上我想對狀態進行輪詢,通話可能需要時間
您可以使用mergeMap
或exhaustMap
。
不同之處在於:
mergeMap
將每 5 秒訂閱一次,而不會取消訂閱(取消)之前的 API 調用。 這意味着您可以有許多並發訂閱。exhaustMap
不會再次訂閱,但它也不會取消正在運行的 API 調用。 在這種情況下,您可能需要在成功響應后最多等待 5 秒,直到它重新訂閱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.