什么是检查观察是否完成的好方法

时间:2014-01-04 07:36:23

标签: scala reactive-programming rx-java

我想知道是否有一种方便的方法来检查是否已经完成了一个observable。例如,我有一个测试

test("An observable that tracks another observable is completed")
{
      val sub = PublishSubject[Boolean](false)
      val newOb = sub recovered // This methods returns an Observable[Try[T]] 


      val res = scala.collection.mutable.ListBuffer[Try[Boolean]]()
      val cr = newOb subscribe( v => res += v, t => assert( false, "There shouldn't be an exception" ), () => println("Stream Completed") )
      sub.onNext(true)
      sub.onNext(false)
      sub.onNext(true)
      sub.onCompleted
      assert( res.toList === List(Success(true), Success(false), Success(true) ))
      newOb.isEmpty subscribe { v => assert( v == true, "Stream should be completed" ) }
  }

recovered方法返回一个Observable [Try [T]]并且是标准Observable的扩展。我想在源Observable完成时检查Observable [Try [T]]是否完成。

所以我用一个主题写了一个测试,我发布了一些值然后最终完成。有没有一种简单的方法可以检查newOb是否也已完成?在Observable中没有类似isCompleted的方法。

1 个答案:

答案 0 :(得分:1)

这是模式Observer的本质,当有一个onCompleted调用时,会触发相应的处理程序,只有它可以被理解为Observer完成了。但是我听说如果Observer已经完成并且它被附加到处理程序,它会立即生效,但我认为它已经在asaavaObserver的较低级别实现了。

该链接可能有所帮助: Netflix RxJava