Короче говоря.Это все неправильно.
Исправлено # 1, а не rxjs-idiomatic: вы подписываетесь неправильно: вы передаете onNext
обратный вызов, пока вас интересует onComplete
.subscribe
принимает * три параметра: onNext, onError, onComplete
, и вы несете ответственность за выбор того, что вам действительно нужно.
Fix # 2, rxjs-idiomaric: вы должны использовать pipe(...)
вместе с операторами, определенными в rxjs/operators
(AFAIR).Обратите внимание, что также легко определить пользовательский оператор.Таким образом, вы можете использовать finalize(() => ...your cleanup logic goes here)
или Observable.create
, возвращая логику завершения в качестве реализации unsubscribe
.Оба хорошо документированы здесь или здесь .
Кроме того, кажется, что вы неправильно понимаете семантику rxjs
.В терминах регулярных выражений его можно определить как next*(error|complete)
, что буквально означает: ноль или бесконечное число next
, за которыми следует либо error
, либо complete
(исключение или: никогда оба одновременно) ровно один раз.Поэтому не ожидайте, что next
сделает что-либо после complete
(или равно error
).