Можно ли предположить, что все вложенные подписки RxJS могут быть заменены на mergeMap? - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно провести рефакторинг некоторого кода для огромного углового проекта, в который я недавно вовлечен. Некоторые части кода озера операторов 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?

1 Ответ

0 голосов
/ 15 октября 2019

Для вашего случая я воспользуюсь SwitchMap.

mergeMap / FlatMap: преобразует каждый излучаемый элемент в новую наблюдаемую, как определено функцией. Выполняет параллельные выполнения и объединяет результаты (иначе называемые flatMap). Порядок не имеет значения.

swicthMap: преобразует каждый излучаемый элемент в новый наблюдаемый, как определено функцией.

- Подписчики изпредыдущая внутренняя наблюдаемая.

-Подписчики новой внутренней наблюдаемой.

-Внутренняя наблюдаемая объединяются в выходной поток.

-При отправке новой наблюдаемой, несколько разпредыдущий отменяется и испускает только последний, потрясающий по производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...