T
- the value type
Example
Disposable d =
Flowable.range(1, 5)
.subscribeWith(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!");
}
});
// ...
d.dispose();
public abstract class DefaultSubscriber<T> extends java.lang.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 "Subscription already set!"
.
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(org.reactivestreams.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.
|
public final void onSubscribe(org.reactivestreams.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 org.reactivestreams.Subscriber<T>
protected final void request(long n)
n
- the request amount, positiveprotected final void cancel()
protected void onStart()
The default implementation requests Long.MAX_VALUE
.