"non testing" 生产代码中的 Observable.never() 并且未明确处理?

Observable.never() in "non testing" production code and it is not disposed explicity?

编码如下:

PublishSubject.create<Pojo>
   .doOnNext{ 
      //..
   }
   .debounce { 
      if (timeout > 0) Observable.timer(timeout, TimeUnit.MILLISECONDS) 
      else Observable.never() 
   }

可以看出,有一个Observable.never(),我的理解是当timeout为负数时什么都不触发。

根据Observable.never() documentation:

Returns an Observable that never sends any items or notifications to an Observer. This ObservableSource is useful primarily for testing purposes.

Scheduler: never does not operate by default on a particular Scheduler. Type Parameters: T - the type of items (not) emitted by the ObservableSource Returns: an Observable that never emits any items or sends any notifications to an Observer

“主要用于测试目的”让我感到困惑。上面的例子对 never() 有效吗?既然没有明确处置,那可以吗?

never() 永远不会发出信号,因此当您在某处需要 Observable 但实际上并不需要某个项目或完成时发出信号,您可以在那里使用它。有时我们需要测试某些需要 Observable 作为参数但根本不触发任何值的运算符状态(例如,创建无限 windows)。

在您的用例中,这可能是错误的,因为 debounce 在内部 Observable 的持续时间内抑制了当前项目之后的项目。该持续时间的结束是来自 Observable 的信号,但 never 永远不会发出信号,因此所有后续项目都将被丢弃,并且 debounce 不会发出任何信号,甚至不会完成。

问题是,您打算如何处理 timeout <= 0 当前项目之后的下一个项目?如果您不想隐藏下一项,只需 return Observable.empty() 即可。