【发布时间】:2020-03-06 22:56:41
【问题描述】:
是否有可能(我找不到任何全面的内容)在一个函数中组合多个 pipable 运算符,这样我也可以通过管道传输它并以不同的方法重复使用?
事情是这样的:
public ngOnInit(): void {
this.route.url
.pipe(
switchMap( (ids: UrlSegment[]) => /* http call */),
tap(result => /* setting a variable within a service */),
tap(result => /* some more manipulating and logic */),
map(result => /* setting a _this_ variable */)
)
.subscribe( () => {
/* some other async tasks, which depend on _this_ variables */
this.cdr.detectChanges();
});
}
如何提取 pipe() 中的所有内容,以便我可以从不同的方法调用相同的运算符链,这需要执行相同的 http 调用以及后续逻辑和操作?
我试图实现的是:
this.route.url
.pipe(
this.combinedPipableMethod(url: UrlSegment[])
)
.subscribe()
【问题讨论】:
-
我不确定您为什么要在地图中设置类成员值(
_this_变量)。您应该根据map中的给定排放创建新数据。不执行副作用。感觉你的map中的代码属于你的subscribe回调。 -
你是对的。我也应该把它改成
tap。 -
我认为您应该在
subscribe回调中执行这些操作。不要真正看到拥有三个tap的意义。我个人只使用tap进行日志记录。 -
我真的不知道
tapwas 的最佳实践或最初意图是什么。正如我所看到的 - 如果这是一些设置并忘记,它在tap中更清晰。我在最近参与的一个项目中选择了这种风格,并且非常喜欢它。在subscribe,我确实有更多的函数调用,它们处理this上下文,但是在另一个函数中没有出现重用这个pipe,所以我会保持原样。 -
当我们在做的时候——你能看看这个问题吗? :) stackoverflow.com/questions/58746929/…
标签: angular typescript rxjs rxjs-pipeable-operators