Определение методов в const, а затем их использование в порядке - PullRequest
0 голосов
/ 30 января 2020

У меня есть страница, на которой я написал

const cc2= this.authService.getRoles().subscribe((data:PortalUserRoleModel[]) => {
       this.roles=data;


  });

и, основываясь на данных, мне нужно позвонить в другую службу и получить доступные страницы

const cc3= this.authService.getMenu(this.role).subscribe((data:PortalMenuModel[]) => {
       this.menu=data;


  });

на странице инициализации. Мне нужно вызовите их по порядку, поэтому я использую это: = concat (cc2, cc3); но это не похоже на работу. Там написано, что concat не работает по подписке. Что я делаю не так и как правильно для этого.

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 30 января 2020

Учитывая, что оба метода обслуживания являются асинхронными, вам повезет, если вы вызовете их оба в порядке, используя Rx JS pipeable операторов:, например, switchMap:

this.authService.getRoles()
  .pipe(
    switchMap((data) => {
      this.roles=data;
      return this.authService.getMenu(this.role)
    })
  ).subscribe((data) => {
     this.menu=data;
  });

Это обеспечит что наблюдаемые из getRoles() возвращаются до срабатывания getMenu().

0 голосов
/ 30 января 2020

просто используйте forJoin:

import { delay } from 'rxjs/operators';
import {forkJoin,of} from 'rxjs';
const example = forkJoin(
  of('Hello'),
  of('World').pipe(delay(1000))
);
const subscribe = example.subscribe(val => console.log(val));

узнайте больше о rx js и подписках

...