我正在学习RxJ并试图了解 Observable.first()方法是如何工作的。 Source code非常混乱。
是否有一种简单的方法可以实现此方法以了解它的工作原理?
我想完全理解内部如何运作,但不了解它是如何实现的。
答案 0 :(得分:1)
从我们看到的文档中
仅发出第一个值。或者仅发出通过某些测试的第一个值。
所以基本的behaiour(只发出第一个值)是通过用订户级字段跟踪是否已经发出第一个值来完成的。
然后predicate
,resultSelector
或defaultValues
只是对该基本代码的一些补充(基本上是filter
,map
或{ {1}})。
如果您想查看此运算符的特定代码,相关部分为default
,它使用FirstSubscriber._next => FirstSubscriber._emit => FirstSubscriber._emitFinal
标志来跟踪它是否已发出。
编辑:如果你想定义一个自定义的Rx扩展来执行this._emitted
所做的事情而不使用其他基本操作符,例如first()
,我会这样做:
take(1)
注意:未经过测试