Код, который у вас есть, усложняет очистку / отслеживание всего, так как подписка вызывает другую.
На самом деле вы можете использовать mergeMap
, чтобы получить тот же результат (я бы порекомендовал switchMap
или concatMap
в случае, если запрос занимает больше времени, чем ваш интервал опроса), но также позволяет ошибке распространяться наверх Observable
:
let sub = timer(500, 1000).pipe(
switchMap(_ => this.http.get(url))
).subscribe(result => {
...
}, error => {
// sub is already unsubscribed at this point since there was an error
});
Чтобы ответить на вопрос:
Что касается утечек памяти, вашоригинальный код должен быть в порядке, если let sub
совпадает с this.sub
.