T
- the value type
Example
Flowable.range(1, 5)
.subscribe(new DefaultSubscriber<Integer>() {
@Override public void onStart() {
System.out.println("Start!");
request(1);
}
@Override public void onNext(Integer t) {
if (t == 3) {
cancel();
}
System.out.println(t);
request(1);
}
@Override public void onError(Throwable t) {
t.printStackTrace();
}
@Override public void onComplete() {
System.out.println("Done!");
}
});
public abstract class DefaultSubscriber<T> extends Object implements FlowableSubscriber<T>
Subscriber
with
support for requesting via request(long)
, cancelling via
via cancel()
(both synchronously) and calls onStart()
when the subscription happens.
All pre-implemented final methods are thread-safe.
The default onStart()
requests Long.MAX_VALUE
by default. Override
the method to request a custom positive amount.
Note that calling request(long)
from onStart()
may trigger
an immediate, asynchronous emission of data to Subscriber.onNext(Object)
. Make sure
all initialization happens before the call to request()
in onStart()
.
Calling request(long)
inside Subscriber.onNext(Object)
can happen at any time
because by design, onNext
calls from upstream are non-reentrant and non-overlapping.
Use the protected cancel()
to cancel the sequence from within an
onNext
implementation.
Like all other consumers, DefaultSubscriber
can be subscribed only once.
Any subsequent attempt to subscribe it to a new source will yield an
IllegalStateException
with message "It is not allowed to subscribe with a(n) <class name> multiple times."
.
Implementation of onStart()
, Subscriber.onNext(Object)
, Subscriber.onError(Throwable)
and Subscriber.onComplete()
are not allowed to throw any unchecked exceptions.
If for some reason this can't be avoided, use Flowable.safeSubscribe(org.reactivestreams.Subscriber)
instead of the standard subscribe()
method.
Constructor and Description |
---|
DefaultSubscriber() |
Modifier and Type | Method and Description |
---|---|
protected void |
cancel()
Cancels the upstream's
Subscription . |
protected void |
onStart()
Called once the subscription has been set on this observer; override this
to perform initialization or issue an initial request.
|
void |
onSubscribe(Subscription s)
Implementors of this method should make sure everything that needs
to be visible in
Subscriber.onNext(Object) is established before
calling Subscription.request(long) . |
protected void |
request(long n)
Requests from the upstream
Subscription . |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
onComplete, onError, onNext
public final void onSubscribe(Subscription s)
FlowableSubscriber
Subscriber.onNext(Object)
is established before
calling Subscription.request(long)
. In practice this means
no initialization should happen after the request()
call and
additional behavior is thread safe in respect to onNext
.
onSubscribe
in interface FlowableSubscriber<T>
onSubscribe
in interface Subscriber<T>
protected final void request(long n)
Subscription
.n
- the request amount, positiveprotected final void cancel()
Subscription
.protected void onStart()
The default implementation requests Long.MAX_VALUE
.