Javascript RXJS:可观测流中特定事件的最佳处理

Javascript RXJS:可观测流中特定事件的最佳处理,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,我订阅了一个可观测的“无限”事件流(“无限可观测”)。我想对事件做一些特殊的处理,例如#1,然后继续。我可以想象有两种方式。1:使用布尔标志从流中查找事件,并将其设置为使用布尔值处理,然后继续处理流。2:使用两个可观察到的引用来表示相同的无穷可观察,并使用一个用于正常处理,另一个使用elementAt(1)来处理感兴趣的项目 有没有一种方法可以在没有布尔值、计数器或多个观察者的情况下优雅地实现这一点 下面是工作示例代码1。此代码是否可以折叠为一个流(没有布尔值?) 我相信一定会有一种更优雅的方式

我订阅了一个可观测的“无限”事件流(“无限可观测”)。我想对事件做一些特殊的处理,例如#1,然后继续。我可以想象有两种方式。1:使用布尔标志从流中查找事件,并将其设置为使用布尔值处理,然后继续处理流。2:使用两个可观察到的引用来表示相同的无穷可观察,并使用一个用于正常处理,另一个使用elementAt(1)来处理感兴趣的项目

有没有一种方法可以在没有布尔值、计数器或多个观察者的情况下优雅地实现这一点

下面是工作示例代码1。此代码是否可以折叠为一个流(没有布尔值?)

我相信一定会有一种更优雅的方式来使用rxjs操作符的能力,而不必求助于布尔运算。下面我有一个选择,我发现它同样不雅观,因为它使用了两个对同一个无穷可观测对象的引用(但没有布尔值)。下面的工作示例代码2(可以折叠成单个流吗?):

(注意:尽管上述方法有效,但单元测试/karma抛出了一个ArgumentOutOfRangeError) 关于如何组合上述两个流并避免使用布尔值(更进一步)有何建议


谢谢

如果您需要一些特殊情况处理,并且它不应该编辑流(副作用),您可以使用范围压缩第一个流发射,这样您可以有一个流和一个索引,并为第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