如何在scala rx

时间:2016-08-08 08:44:48

标签: scala system.reactive reactive-programming

我试图了解可观察的工作原理。这是我的代码。

def make: Stream[Int] = {
    Stream.cons(scala.util.Random.nextInt(10), {
      println("Making ..")
      Thread.sleep(1000)
      make
    })
  }

  val y = Observable.from(make)

  y.foreach(a => println(a))

emit将每1秒产生一个新值。我正在制作一个可观察的东西。对于每个循环将永远打印新生成的值。

据我所知,a => println(a)是一个回调值,在rx observable中调用onNext(t)。

我想弄清楚的是如何粘合到生产者那么当产生新值时,onNext被调用的地方。我看了一段时间的rx代码,仍然无法弄清楚。

感谢。

1 个答案:

答案 0 :(得分:0)

似乎订阅了流调用rx.Observable'

Subscription subscribe(Subscriber<? super T> subscriber) 

这将调用IterableProducer.request方法 这将有一些代码。

    if (n == Long.MAX_VALUE && REQUESTED_UPDATER.compareAndSet(this, 0, Long.MAX_VALUE)) {
        // fast-path without backpressure
        while (it.hasNext()) {
            if (o.isUnsubscribed()) {
                return;
            }
            o.onNext(**it.next()**);
        }
        if (!o.isUnsubscribed()) {
            o.onCompleted();
        }
    }

onNext是观察者代码,输入到生成器it.next。这是怎么粘的。