我试图了解可观察的工作原理。这是我的代码。
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代码,仍然无法弄清楚。
感谢。
答案 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。这是怎么粘的。