【问题标题】:How to pass observer variable as parameter?如何将观察者变量作为参数传递?
【发布时间】:2020-11-23 12:25:27
【问题描述】:

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

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

this.application 不是观察者,而是ApplicationResponse 时,如何将applicationObs 传递给fabricApplicationSidebarMenu()

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

【问题讨论】:

标签: javascript angular rxjs


【解决方案1】:

你想做什么? 像这样?

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

【讨论】:

    【解决方案2】:

    我建议你换个角度想一想,你真正想做的是在你的 observable 管道上添加一个新函数。所以我会做这样的事情:

    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 管道。 See here

    请注意,无论fabricApplicationSidebarMenu 在订阅时做什么,上述操作都会触发 applicationObs 。这可能是可取的,也可能不是可取的,具体取决于您的计划以及这些功能的作用。

    【讨论】:

      猜你喜欢
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 2019-02-25
      • 2011-04-05
      • 2014-07-09
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多