switchMap не отменяет никаких запросов. Он отписывается от потока.
А уже HttpClient так устроен, что отменяет запрос при отписке. Т.е. вызывает XMLHttpRequest.abort() когда срабатывает TearDown logic.
Если вы используете fetch, а не xhr, то его тоже можно завернуть в обсервабл. Что-то типа такого
function request(url) {
return new Observable(observer => {
const controller = new AbortController()
const signal = controller.signal
signal.addEventListener("abort", () => observer.complete());
fetch(url, { signal })
.then(res => {
observer.next(res);
observer.complete();
})
.catch((err) => {
observer.error(err);
observer.complete();
});
return () => controller.abort();
});
}
Писал по памяти, возможно это даже работает :)
При создании Observable переданный ему коллбэк возвращает логику, которая будет выполнена при отписке от него, т.е. teardown