Как передать переменную наблюдателя в качестве параметра? - PullRequest
1 голос
/ 03 августа 2020

Компонент имеет переменную applicationObs в качестве наблюдателя:

export class OrderDetailsComponent implements OnInit {
    public applicationObs: Observable<ApplicationResponse>;
    
     public getSections(): SidebarMenuItem[] {
        const fabricApplicationSidebar = fabricApplicationSidebarMenu(this.application); // Here 
     }
}

Как передать applicationObs в fabricApplicationSidebarMenu(), когда this.application не является наблюдателем, а ApplicationResponse.

Как передать асинхронные c данные как переменную в функции?

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Я бы посоветовал вам подумать об этом немного по-другому, на самом деле вы хотите добавить новую функцию в свой наблюдаемый канал. поэтому я бы сделал что-то вроде этого:

export class OrderDetailsComponent implements OnInit {
    public applicationObs: Observable<ApplicationResponse>;
    
     public getSections(): Observable<SidebarMenuItem[]> {
        return applicationObs.pipe(
          map(m => fabricApplicationSidebarMenu(m))
        );

     }
}

Здесь мы добавляли новый канал к существующему наблюдаемому и возвращали его. это все еще asyn c, поэтому сам по себе ничего не делает. Чтобы получить разделы, вам все равно необходимо подписаться на полученный наблюдаемый объект:

this.getSections().subscribe((s: SidebarMenuItem[]) => {

});

Вы также можете потенциально использовать канал async, если хотите. См. Здесь

Обратите внимание, что приведенное выше приведет к запуску applicationObs и независимо от того, что fabricApplicationSidebarMenu делает при подписке. Это может быть, а может и не быть желательным, в зависимости от того, что вы планируете делать и что делают эти функции.

1 голос
/ 03 августа 2020

что ты хочешь сделать? что-то вроде этого?

this.applicationObs.subscribe(
(applicationResponse: ApplicationResponse) => {
   const fabricApplicationSidebar = fabricApplicationSidebarMenu(applicationResponse); // Here 
});
...