Ответ 1
Как указано в соответствующей документации RxJS, метод .subscribe()
может принимать третий аргумент, который вызывается при завершении, если ошибок нет.
Для справки:
[onNext]
(Function
): Функция для вызова для каждого элемента в наблюдаемой последовательности.[onError]
(Function
): Функция для вызова при исключительном завершении наблюдаемой последовательности.[onCompleted]
(Function
): функция, вызываемая при грациозном завершении наблюдаемой последовательности.
Поэтому вы можете обрабатывать свою логику маршрутизации в onCompleted
вызове, поскольку он будет вызван изящным окончанием (что подразумевает, что при его вызове не будет никаких ошибок).
this.httpService.makeRequest()
.subscribe(
result => {
// Handle result
console.log(result)
},
error => {
this.errors = error;
},
() => {
// 'onCompleted' callback.
// No errors, route to new page here
}
);
В качестве побочного примечания существует также метод .finally()
который вызывается при завершении независимо от успеха/отказа вызова. Это может быть полезно в сценариях, где вы всегда хотите выполнить определенную логику после HTTP-запроса независимо от результата (т.е. Для целей ведения журнала или для некоторого взаимодействия с пользовательским интерфейсом, такого как показ модальности).
Rx.Observable.prototype.finally(action)
Вызывает указанное действие после того, как наблюдаемая последовательность источника прекращается изящно или исключительно.
Например, вот пример:
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/finally';
// ...
this.httpService.getRequest()
.finally(() => {
// Execute after graceful or exceptionally termination
console.log('Handle logging logic...');
})
.subscribe (
result => {
// Handle result
console.log(result)
},
error => {
this.errors = error;
},
() => {
// No errors, route to new page
}
);