Flowable
The Flowable
class implements the ReactiveStream Publisher
interface with Rx-style operators.
Example
This example creates a Flowable
that publishes the numbers 0, 1, 2, 3 on demand and then
completes.
const flowable = new Flowable((subscriber) => {
// lambda is not executed until `subscribe()` is called
const values = [0, 1, 2, 3];
subscriber.onSubscribe({
cancel: () => {
/* no-op */
},
request: (n) => {
while (n--) {
if (values.length) {
const next = values.shift();
// Can't publish values until request() is called
subscriber.onNext(next);
} else {
subscriber.onComplete();
break;
}
}
},
});
});
flowable.subscribe({
onComplete: () => console.log('done'),
onError: (error) => console.error(error),
onNext: (value) => console.log(value),
// Nothing happens until `request(n)` is called
onSubscribe: (sub) => sub.request(4),
});
// logs '0', '1', '2', '3', 'done'
API
constructor (function)
class Flowable<T> {
constructor(source: Source<T>)
}
type Source<T> = (subscriber: Subscriber<T>) => void;
type Subscriber<T> = {
onComplete: () => void,
onError: (error: Error) => void,
onNext: (data: T) => void,
onSubscribe: (subscription: Subscription) => void,
};
type Subscription = {
cancel(): void,
request(n: number): void,
};
subscribe() (method)
This method connects the Flowable (publisher) to a subscriber of values. Subscribing alone
does not indicate demand: rather, it connects publisher & subscriber and allows
the subscriber to begin expressing demand for values via a Subscription
object. Note that PartialSubscriber
differs from the above Subscriber
only
in that methods are optional.
subscribe(subscriber: PartialSubscriber<T>): void
type PartialSubscriber<T> = {
onComplete?: () => void,
onError?: (error: Error) => void,
onNext?: (data: T) => void,
onSubscribe?: (subscription: Subscription) => void,
};
map() (method)
This method applies a transform function to values produced by this Flowable
. This is similar to
Array.prototype.map
, Observable.prototype.map
, etc.
map<U>(fn: (data: T) => U): Flowable<U>