Мне нужно провести рефакторинг некоторого кода для огромного углового проекта, в который я недавно вовлечен. Некоторые части кода озера операторов RxJS и выполняют такие вещи, как простые вложенные подписки или обработчики ошибок копирования / вставки вместо использования каналов.
Можно ли предположить, что любые вложенные подписки глубиной 1 могут быть заменены слиянием?
Давайте рассмотрим метод login
, подобный следующему:
private login() {
this.userService.logIn(this.param1, this.param2).subscribe((loginResult: {}) => {
this.userService.getInfo(this.param3).subscribe((user: UserModel) => {
// [the login logic]
},
(e) => {
// [the error handling logic]
})
}, (e) => {
// [The exact same copy/pasted error handling logic]
});
}
Это так? безопасно заменить его на это?
private login() {
this.userService.logIn(this.param1, this.param2)
.pipe(
mergeMap((x) => this.userService.getInfo(this.param3))
)
.subscribe((user: UserModel) => {
// [the login logic that redirects to "my account" page]
},
(e) => {
// [the error handling logic]
});
}
В чем разница, например, с flatMap или switchMap?