Javascript RXJS:可观测流中特定事件的最佳处理
我订阅了一个可观测的“无限”事件流(“无限可观测”)。我想对事件做一些特殊的处理,例如#1,然后继续。我可以想象有两种方式。1:使用布尔标志从流中查找事件,并将其设置为使用布尔值处理,然后继续处理流。2:使用两个可观察到的引用来表示相同的无穷可观察,并使用一个用于正常处理,另一个使用elementAt(1)来处理感兴趣的项目 有没有一种方法可以在没有布尔值、计数器或多个观察者的情况下优雅地实现这一点 下面是工作示例代码1。此代码是否可以折叠为一个流(没有布尔值?) 我相信一定会有一种更优雅的方式来使用rxjs操作符的能力,而不必求助于布尔运算。下面我有一个选择,我发现它同样不雅观,因为它使用了两个对同一个无穷可观测对象的引用(但没有布尔值)。下面的工作示例代码2(可以折叠成单个流吗?): (注意:尽管上述方法有效,但单元测试/karma抛出了一个ArgumentOutOfRangeError) 关于如何组合上述两个流并避免使用布尔值(更进一步)有何建议Javascript RXJS:可观测流中特定事件的最佳处理,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,我订阅了一个可观测的“无限”事件流(“无限可观测”)。我想对事件做一些特殊的处理,例如#1,然后继续。我可以想象有两种方式。1:使用布尔标志从流中查找事件,并将其设置为使用布尔值处理,然后继续处理流。2:使用两个可观察到的引用来表示相同的无穷可观察,并使用一个用于正常处理,另一个使用elementAt(1)来处理感兴趣的项目 有没有一种方法可以在没有布尔值、计数器或多个观察者的情况下优雅地实现这一点 下面是工作示例代码1。此代码是否可以折叠为一个流(没有布尔值?) 我相信一定会有一种更优雅的方式
谢谢 如果您需要一些特殊情况处理,并且它不应该编辑流(副作用),您可以使用范围压缩第一个流发射,这样您可以有一个流和一个索引,并为第n个元素执行逻辑
// given a source observable
src$.map( ( src, index ) => { src, index } )
.do(
( srcWithIndex ) => {
//get index from zippedSrc.index
// do write custom logic here
if srcWithIndex.index == 3 [...]
}
)
// stream is not interrupted
然后继续。
-你是什么意思?@Maximus,编辑并添加了详细信息。我的流有“无限事件”(编辑),仅供参考。我正在研究您的响应。对不起,我记得map fn接受第二个参数,这是发出的索引,我将很快编辑我的响应
const normalInfiniteObservable = infiniteObservable;
const firstInfiniteObservable= infiniteObservable;
normalInfiniteObservable .subscribe((item) => this.item = item); //process items normally
// meanwhile, grab item(1) from special processing
firstInfiniteObservable.elementAt(1).subscribe((item) => {
// do something with item(1) only...
});
// given a source observable
src$.map( ( src, index ) => { src, index } )
.do(
( srcWithIndex ) => {
//get index from zippedSrc.index
// do write custom logic here
if srcWithIndex.index == 3 [...]
}
)
// stream is not interrupted