Задать вопрос
@Mariik

RxJs — как добавить условный оператор в поток?

Привет.
Пытаюсь переписать этот блок кода с промисов на Observable и столкнулся с тем, что я не особо понимаю как именно делать условия.
return new Promise((resolve) => {
       if (this.userService.isAuthenticate()) { 
        if (!this.permissionService.isPermissionForRoute(state.url);) {
           const mainUrl = this.permissionService.getMainRoute();
           this.router.navigateByUrl(mainUrl);
          return resolve(false);
        } else {
          return resolve(true);
         }
       } if (state.url === '/auth/login' || this.permissionService.isPublicRoute(state.url) ) {
        resolve(true);
      } else {
         this.router.navigateByUrl('/auth/login');
         resolve(false);
       }
     });
  • Вопрос задан
  • 461 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@itPiligrim
Front-end разработчик + 1С
rxjs не создан для замены всего кода. Его смысл в том, что "все на свете" можно представить единообразно в виде потоков, а потом их комбинировать, изменять, подписывать на них и т.п. Думайте о том, какие потоки Вам нужны.

В данном коде плохо то, что внутри промиса вызывается navigateByUrl. Это неправильно. Вы создаете поток, но при этом внутри него делаете что-то непонятное, чуждое этому потоку. Задача потока только эмитеть значения. Следует убрать сторонние вызовы. Надо сделать чистый промис, задача которого вернуть нечто, что позволит потом принять какие-то решения по навигации и т.п. Сам промис можно сконвертировать в Observable через FromPromise или сразу оформить через Observable. Это уже не суть. Промис - это тоже поток, только немного в другом формате, поэтому нет смысла ставить задачу переписать промис в Observable. Это тоже самое, как заменять let на const. Да, красивее, но смысл почти не меняется.

Поэтому просто сделайте промис чистым, а переход вынесите наружу.
Ответ написан
Комментировать
Для фильтрации потока используется оператор filter
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽