首页 > 解决方案 > 如何将观察者变量作为参数传递?

问题描述

applicationObs该组件具有作为观察者的变量:

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

如何传递applicationObsfabricApplicationSidebarMenu()何时this.application不是观察者,而是ApplicationResponse

如何在函数中将异步数据作为变量传递?

标签: javascriptangularrxjs

解决方案


我建议您对此有所不同,您真正想要做的是在您的可观察管道上添加一个新功能。所以我会做这样的事情:

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

     }
}

这里是在现有的 observable 上添加一个新管道并返回它。这仍然是异步的,所以它本身并没有做任何事情。要获取这些部分,您仍然需要订阅生成的 observable:

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

});

如果您愿意,您也可以使用async管道。看这里

请注意,上面将触发 applicationObs以及订阅时所做的任何事情fabricApplicationSidebarMenu。这可能是可取的,也可能不是可取的,具体取决于您的计划以及这些功能的作用。


推荐阅读