RxJS:特别对待第一种情况,但继续流式传输其余部分

Abr*_*m P 4 javascript observers reactive-programming rxjs

假设我想单独处理 Observable 发出的第一个事件,然后继续我的订阅。

例如,如果我有以下链:

observable.throttleTime(2000)
      .takeFirst(() => console.log('potato'))
      .switchMap((event:MouseEvent) => {
        const element:Element = event.target as Element;
        return this.innerObservable(('tomato'));
      })
      .subscribe(({result}) => console.log(result))
Run Code Online (Sandbox Code Playgroud)

那失败了,但是我将如何使这种行为起作用?

mar*_*tin 5

许多采用回调函数的 RxJS 5 操作符也传递正在通过的项目的索引。这意味着您可以编写例如以下内容:

observable.throttleTime(2000)
    .map((value, index) => index === 0 ? 'potato' : value)
    ...
    .subscribe(({result}) => console.log(result))
Run Code Online (Sandbox Code Playgroud)

例如,将索引传递给filter()switchMap()takeWhile()运算符等。


Jul*_*ova 0

将发布与first 和concat 运算符一起使用。这是一个例子:

Rx.Observable.interval(1000)
 .publish(shared => {
    return  shared.first().mapTo('FIRST')
       .concat(shared.skip(1));
})
.subscribe(x=>console.log(x))
Run Code Online (Sandbox Code Playgroud)