This subject does not have a public constructor by design; a new empty instance of this
AsyncSubject can be created via the create() method.
Since a Subject is conceptionally derived from the Processor type in the Reactive Streams specification,
nulls are not allowed (Rule 2.13)
as parameters to onNext(Object) and onError(Throwable). Such calls will result in a
NullPointerException being thrown and the subject's state is not changed.
Since an AsyncSubject is an io., it does not support backpressure.
When this AsyncSubject is terminated via onError(Throwable), the
last observed item (if any) is cleared and late io.s only receive
the onError event.
The AsyncSubject caches the latest item internally and it emits this item only when onComplete is called.
Therefore, it is not recommended to use this Subject with infinite or never-completing sources.
Even though AsyncSubject implements the Observer interface, calling
onSubscribe is not required (Rule 2.12)
if the subject is used as a standalone source. However, calling onSubscribe
after the AsyncSubject reached its terminal state will result in the
given Disposable being disposed immediately.
Calling onNext(Object), onError(Throwable) and onComplete()
is required to be serialized (called from the same thread or called non-overlappingly from different threads
through external means of serialization). The toSerialized() method available to all Subjects
provides such serialization and also protects against reentrance (i.e., when a downstream Observer
consuming this subject also wants to call onNext(Object) on this subject recursively).
The implementation of onXXX methods are technically thread-safe but non-serialized calls
to them may lead to undefined state in the currently subscribed Observers.
This AsyncSubject supports the standard state-peeking methods hasComplete(), hasThrowable(),
getThrowable() and hasObservers() as well as means to read the very last observed value -
after this AsyncSubject has been completed - in a non-blocking and thread-safe
manner via hasValue(), getValue(), getValues() or getValues(Object[]).
AsyncSubject does not operate by default on a particular io.reactivex.Scheduler and
the Observers get notified on the thread where the terminating onError or onComplete
methods were invoked.onError(Throwable) is called, the AsyncSubject enters into a terminal state
and emits the same Throwable instance to the last set of Observers. During this emission,
if one or more Observers dispose their respective Disposables, the
Throwable is delivered to the global error handler via
io.reactivex.plugins.RxJavaPlugins#onError(Throwable) (multiple times if multiple Observers
cancel at once).
If there were no Observers subscribed to this AsyncSubject when the onError()
was called, the global error handler is not invoked.
Example usage:
AsyncSubject<Object> subject = AsyncSubject.create();
TestObserver<Object> to1 = subject.test();
to1.assertEmpty();
subject.onNext(1);
// AsyncSubject only emits when onComplete was called.
to1.assertEmpty();
subject.onNext(2);
subject.onComplete();
// onComplete triggers the emission of the last cached item and the onComplete event.
to1.assertResult(2);
TestObserver<Object> to2 = subject.test();
// late Observers receive the last cached item too
to2.assertResult(2);
| Modifier and Type | Class and Description |
|---|---|
| pack-priv static class |
| Modifier and Type | Field and Description |
|---|---|
| pack-priv static final AsyncSubject. | |
| pack-priv Throwable | error
Write before updating subscribers, read after reading subscribers as TERMINATED. |
| pack-priv final AtomicReference | |
| pack-priv static final AsyncSubject. | |
| pack-priv T | value
Write before updating subscribers, read after reading subscribers as TERMINATED. |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv boolean | Returns: true if successful, false if the subject has terminatedthe subscriber to add psTries to add the given subscriber to the subscribers array atomically or returns false if the subject has terminated. |
| public static < the value type to be received and emitted T> AsyncSubject | |
| public Throwable | getThrowable()
Implements abstract io. |
| public T | Returns: a single value the Subject currently has or null if no such value existsReturns a single value the Subject currently has or null if no such value exists. |
| public Object[] | Returns: the array containing the snapshot of all values of the Subject
Deprecated
in 2.1.14; put the result of
Returns an Object array containing snapshot all values of the Subject.
getValue() into an array manually, will be removed in 3.x
|
| public T[] | Returns: the given array if the values fit into it or a new array containing all valuesthe target array to copy values into if it fits array)
Deprecated
in 2.1.14; put the result of
Returns a typed array containing a snapshot of all values of the Subject.
getValue() into an array manually, will be removed in 3.x
|
| public boolean | hasComplete()
Implements abstract io. |
| public boolean | hasObservers()
Implements abstract io. |
| public boolean | hasThrowable()
Implements abstract io. |
| public boolean | |
| public void | onComplete()
Implements io. Observable has finished sending push-based notifications.
|
| public void | onError(Throwable
the exception encountered by the Observable t)Implements io. Observable has experienced an error condition.
|
| public void | onNext(T
the item emitted by the Observable t)Implements io. |
| public void | onSubscribe(Disposable
the Disposable instance whose d)Disposable#dispose() can
be called anytime to cancel the connectionImplements io. onNext(Object)) and asynchronous manner.
|
| pack-priv void | remove(AsyncSubject.
the subject to remove psAtomically removes the given subscriber if it is subscribed to the subject. |
| protected void | subscribeActual(Observer<? super T>
the incoming Observer, never null observer)Implements abstract io. Observers.
|
| EMPTY | back to summary |
|---|---|
pack-priv static final AsyncSubject.
| |
| error | back to summary |
|---|---|
| pack-priv Throwable error Write before updating subscribers, read after reading subscribers as TERMINATED. | |
| subscribers | back to summary |
|---|---|
| pack-priv final AtomicReference<AsyncSubject. | |
| TERMINATED | back to summary |
|---|---|
pack-priv static final AsyncSubject.
| |
| value | back to summary |
|---|---|
| pack-priv T value Write before updating subscribers, read after reading subscribers as TERMINATED. | |
| AsyncSubject | back to summary |
|---|---|
| pack-priv AsyncSubject() Constructs an AsyncSubject.
| |
| add | back to summary |
|---|---|
| pack-priv boolean add(AsyncSubject. Tries to add the given subscriber to the subscribers array atomically or returns false if the subject has terminated.
| |
| create | back to summary |
|---|---|
| public static <T> AsyncSubject Creates a new AsyncProcessor.
| |
| getThrowable | back to summary |
|---|---|
| public Throwable getThrowable() Implements abstract io. Doc from io. Returns the error that caused the Subject to terminate or null if the Subject hasn't terminated yet. The method is thread-safe. | |
| getValue | back to summary |
|---|---|
| public T getValue() Returns a single value the Subject currently has or null if no such value exists. The method is thread-safe.
| |
| getValues | back to summary |
|---|---|
| public Object[] getValues()
Deprecated in 2.1.14; put the result of Returns an Object array containing snapshot all values of the Subject. The method is thread-safe.
| |
| getValues | back to summary |
|---|---|
| public T[] getValues(T[] array)
Deprecated in 2.1.14; put the result of Returns a typed array containing a snapshot of all values of the Subject. The method follows the conventions of Collection.toArray by setting the array element after the last value to null (if the capacity permits). The method is thread-safe.
| |
| hasComplete | back to summary |
|---|---|
| public boolean hasComplete() Implements abstract io. Doc from io. Returns true if the subject has reached a terminal state through a complete event. The method is thread-safe.
| |
| hasObservers | back to summary |
|---|---|
| public boolean hasObservers() Implements abstract io. Doc from io. Returns true if the subject has any Observers. The method is thread-safe.
| |
| hasThrowable | back to summary |
|---|---|
| public boolean hasThrowable() Implements abstract io. Doc from io. Returns true if the subject has reached a terminal state through an error event. The method is thread-safe.
| |
| hasValue | back to summary |
|---|---|
| public boolean hasValue() Returns true if the subject has any value. The method is thread-safe.
| |
| onComplete | back to summary |
|---|---|
| public void onComplete() Implements io. Doc from io. Notifies the Observer that the
The
| |
| onError | back to summary |
|---|---|
| public void onError(Throwable t) Implements io. Doc from io. Notifies the Observer that the
If the
| |
| onNext | back to summary |
|---|---|
| public void onNext(T t) Implements io. Doc from io. Provides the Observer with a new item to observe.
The
The
| |
| onSubscribe | back to summary |
|---|---|
| public void onSubscribe(Disposable d) Implements io. Doc from io. Provides the Observer with the means of cancelling (disposing) the
connection (channel) with the Observable in both
synchronous (from within
| |
| remove | back to summary |
|---|---|
| pack-priv void remove(AsyncSubject. Atomically removes the given subscriber if it is subscribed to the subject.
| |
| subscribeActual | back to summary |
|---|---|
| protected void subscribeActual(Observer<? super T> observer) Implements abstract io. Doc from io. Operator implementations (both source and intermediate) should implement this method that
performs the necessary business logic and handles the incoming There is no need to call any of the plugin hooks on the current | |
| Modifier and Type | Field and Description |
|---|---|
| pack-priv final AsyncSubject | |
| private static final long |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| public void | dispose()
Overrides io. Implements io. |
| pack-priv void | |
| pack-priv void |
| parent | back to summary |
|---|---|
| pack-priv final AsyncSubject<T> parent | |
| serialVersionUID | back to summary |
|---|---|
| private static final long serialVersionUID Hides io. | |
| AsyncDisposable | back to summary |
|---|---|
| pack-priv AsyncDisposable(Observer<? super T> actual, AsyncSubject<T> parent) | |
| dispose | back to summary |
|---|---|
| public void dispose() Overrides io. Implements io. Doc from io. Dispose the resource, the operation should be idempotent.
| |
| onComplete | back to summary |
|---|---|
| pack-priv void onComplete() | |
| onError | back to summary |
|---|---|
| pack-priv void onError(Throwable t) | |