Rxjs:如何实现Observable.first()?

时间:2017-11-12 16:05:25

标签: rxjs observable

我正在学习RxJ并试图了解 Observable.first()方法是如何工作的。 Source code非常混乱。

是否有一种简单的方法可以实现此方法以了解它的工作原理?

我想完全理解内部如何运作,但不了解它是如何实现的。

1 个答案:

答案 0 :(得分:1)

从我们看到的文档中

  

仅发出第一个值。或者仅发出通过某些测试的第一个值。

所以基本的behaiour(只发出第一个值)是通过用订户级字段跟踪是否已经发出第一个值来完成的。

然后predicateresultSelectordefaultValues只是对该基本代码的一些补充(基本上是filtermap或{ {1}})。

如果您想查看此运算符的特定代码,相关部分为default,它使用FirstSubscriber._next => FirstSubscriber._emit => FirstSubscriber._emitFinal标志来跟踪它是否已发出。

编辑:如果你想定义一个自定义的Rx扩展来执行this._emitted所做的事情而不使用其他基本操作符,例如first(),我会这样做:

take(1)

注意:未经过测试