это должно быть примерно так:
this.route.paramMap.pipe(
switchMap((parameters) => {
if (params.has("id") {
return this.serverRequest(params); // return the request, possibly add .pipe() if needed
} else if (params.has("block")) {
return of(params); // add to array here and return whatever
} else if (params.has("request")) {
return this.serverRequest(params); // return the request, possibly add .pipe() if needed
}
return of(params); // whatever default return here
})
).subscribe((result) => {
//handle your result
});
switchMap
не отменяет того, что происходит в финальной подписке, оно отменяет то, что происходит во внутренней наблюдаемой, поэтому внутренняя наблюдаемая должна быть что вы хотите отменить. В целом, вложенные подписки - это плохая практика, и это означает, что вы делаете что-то не так.
Вы также можете рассмотреть возможность добавления оператора debounceTime
перед вашим switchMap
, если вы даже не хотите, чтобы запросы отправлялись если переключение маршрута происходит очень быстро.