Rx

wvlet.airframe.rx.Rx
See theRx companion object
trait Rx[+A] extends RxOps[A]

The base reactive stream interface that can receive events from upstream operators and chain next actions using Scala-collection like operators (e.g., map, filter, etc.)

Attributes

Companion
object
Graph
Supertypes
trait RxOps[A]
class Object
trait Matchable
class Any
Known subtypes
class ConcatOp[A]
class IntervalOp
class Join3Op[A, B, C]
class Join4Op[A, B, C, D]
class Join5Op[A, B, C, D, E]
class JoinOp[A, B]
class LastOp[A]
class SeqOp[A]
class SingleOp[A]
class TakeOp[A]
class TimerOp
class TransformOp[A, B]
class TransformRxOp[A, B]
class TransformTryOp[A, B]
class TryOp[A]
class UnaryRx[I, A]
class CacheOp[A]
class FilterOp[A]
class FlatMapOp[A, B]
class MapOp[A, B]
class NamedOp[A]
class RecoverOp[A, U]
class RecoverWithOp[A, U]
class TapOnOp[A]
class ThrottleFirstOp[A]
class ThrottleLastOp[A]
class Zip3Op[A, B, C]
class Zip4Op[A, B, C, D]
class Zip5Op[A, B, C, D, E]
class ZipOp[A, B]
trait RxCache[A]
trait RxSource[A]
class RxBlockingQueue[A]
class RxVar[A]
Show all

Members list

Value members

Concrete methods

def andThen[B](f: A => Future[B])(implicit ex: ExecutionContext): Rx[B]

Combine Rx stream and Future operators.

Combine Rx stream and Future operators.

This method is useful when you need to call RPC multiple times and chain the next operation after receiving the response.

Rx.intervalMillis(1000)
 .andThen { i => callRpc(...) } // Returns Future
 .map { (rpcReturnValue) => ... } // Use the Future response

Attributes

def cache[A1 >: A]: RxCache[A1]

Cache the last item, and emit the cached value if available.

Cache the last item, and emit the cached value if available.

The cached value will be preserved to the operator itself even after cancelling the subscription. Re-subscription of this operator will immediately return the cached value to the downstream operator.

This operator is useful if we need to involve time-consuming process, and want to reuse the last result: val v = Rx.intervalMillis(1000).map(i => (heavy process)).cache

v.map { x => ... }

Attributes

def concat[A1 >: A](other: Rx[A1]): Rx[A1]
def filter(f: A => Boolean): Rx[A]

Applies the given filter and emit the value only when the filter condition matches

Applies the given filter and emit the value only when the filter condition matches

Attributes

def flatMap[B](f: A => RxOps[B]): Rx[B]

Applies f to the input value that produces another Rx stream.

Applies f to the input value that produces another Rx stream.

Attributes

def join[B](other: RxOps[B]): Rx[(A, B)]

Emit a new output if one of Rx[A] or Rx[B] is changed.

Emit a new output if one of Rx[A] or Rx[B] is changed.

This method is useful when you need to monitor multiple Rx objects.

Using joins will be more intuitive than nesting multiple Rx operators like Rx[A].map { x => ... Rx[B].map { ...} }.

Attributes

def join[B, C](b: RxOps[B], c: RxOps[C]): Rx[(A, B, C)]

Emit a new output if one of Rx[A], Rx[B], or Rx[C] is changed.

Emit a new output if one of Rx[A], Rx[B], or Rx[C] is changed.

Attributes

def join[B, C, D](b: RxOps[B], c: RxOps[C], d: RxOps[D]): Rx[(A, B, C, D)]

Emit a new output if one of Rx[A], Rx[B], Rx[C], or Rx[D] is changed.

Emit a new output if one of Rx[A], Rx[B], Rx[C], or Rx[D] is changed.

Attributes

def join[B, C, D, E](b: RxOps[B], c: RxOps[C], d: RxOps[D], e: RxOps[E]): Rx[(A, B, C, D, E)]

Emit a new output if one of Rx[A], Rx[B], Rx[C], Rx[D], or Rx[E] is changed.

Emit a new output if one of Rx[A], Rx[B], Rx[C], Rx[D], or Rx[E] is changed.

Attributes

def map[B](f: A => B): Rx[B]

Applies f to the input value and return the result.

Applies f to the input value and return the result.

Attributes

def mapToRx[B](f: A => RxOps[B]): Rx[B]

Applies f to the input value that produces another Rx stream. This method is an alias of flatMap(f)

Applies f to the input value that produces another Rx stream. This method is an alias of flatMap(f)

Attributes

def sample(timeWindow: Long, unit: TimeUnit): Rx[A]

Emit the most recent item of the source within periodic time intervals.

Emit the most recent item of the source within periodic time intervals.

Attributes

def startWith[A1 >: A](a: A1): Rx[A1]

Emit the given item first before returning the items from the source.

Emit the given item first before returning the items from the source.

Attributes

def startWith[A1 >: A](lst: Seq[A1]): Rx[A1]

Emit the given items first before returning the items from the source.

Emit the given items first before returning the items from the source.

Attributes

def take(n: Long): Rx[A]

Take an event up to n elements. This may receive fewer events than n if the upstream operator completes before generating n elements.

Take an event up to n elements. This may receive fewer events than n if the upstream operator completes before generating n elements.

Attributes

def throttleFirst(timeWindow: Long, unit: TimeUnit): Rx[A]

Emit the first item of the source within each sampling period. For example, this is useful to prevent double-clicks of buttons.

Emit the first item of the source within each sampling period. For example, this is useful to prevent double-clicks of buttons.

Attributes

def throttleLast(timeWindow: Long, unit: TimeUnit): Rx[A]

Emit the most recent item of the source within periodic time intervals.

Emit the most recent item of the source within periodic time intervals.

Attributes

def toOption[X, A1 >: A](implicit ev: A1 <:< Option[X]): RxOption[X]
override def toRx: Rx[A]

Attributes

Definition Classes
def toSeq: Seq[A]

Materialize the stream as Seq[A]. This works only for the finite stream and for Scala JVM.

Materialize the stream as Seq[A]. This works only for the finite stream and for Scala JVM.

Attributes

def transform[B](f: (Try[A]) => B): Rx[B]

Transform a Success(v) or Failure(Throwable) input with a given function.

Transform a Success(v) or Failure(Throwable) input with a given function.

Attributes

def transformFailure(f: PartialFunction[Throwable, Throwable]): Rx[A]

Transform a specific type of an exception into another exception. This is useful for handling exceptions.

Transform a specific type of an exception into another exception. This is useful for handling exceptions.

Attributes

def transformRx[B](f: (Try[A]) => RxOps[B]): Rx[B]

Transform the input value by wrapping it with Try regardless of success or failure. This is useful when you need to handle both success and failure cases in the same way.

Transform the input value by wrapping it with Try regardless of success or failure. This is useful when you need to handle both success and failure cases in the same way.

Attributes

def transformTry[B](f: (Try[A]) => Try[B]): Rx[B]

Transform the input value by wrapping it with Try regardless of success or failure. This is useful when you need to add a post-processing step after handling success and failure cases.

Transform the input value by wrapping it with Try regardless of success or failure. This is useful when you need to add a post-processing step after handling success and failure cases.

Attributes

def when(cond: A => Boolean): Rx[A]

An alias of filter

An alias of filter

Attributes

def withFilter(f: A => Boolean): Rx[A]

An alias of filter

An alias of filter

Attributes

def withName(name: String): Rx[A]
def zip[B](other: RxOps[B]): Rx[(A, B)]

Combine two Rx streams to form a sequence of pairs. This will emit a new pair when both of the streams are updated.

Combine two Rx streams to form a sequence of pairs. This will emit a new pair when both of the streams are updated.

Attributes

def zip[B, C](b: RxOps[B], c: RxOps[C]): Rx[(A, B, C)]

Combine three Rx streams to form a sequence of triples. This will emit a new triple when all of the streams are updated.

Combine three Rx streams to form a sequence of triples. This will emit a new triple when all of the streams are updated.

Attributes

def zip[B, C, D](b: RxOps[B], c: RxOps[C], d: RxOps[D]): Rx[(A, B, C, D)]

Combine four Rx streams to form a sequence of quadruples. This will emit a new quadruple when all of the streams are updated.

Combine four Rx streams to form a sequence of quadruples. This will emit a new quadruple when all of the streams are updated.

Attributes

def zip[B, C, D, E](b: RxOps[B], c: RxOps[C], d: RxOps[D], e: RxOps[E]): Rx[(A, B, C, D, E)]

Combine five Rx streams to form a sequence of quintuples. This will emit a new quintuple when all of the streams are updated.

Combine five Rx streams to form a sequence of quintuples. This will emit a new quintuple when all of the streams are updated.

Attributes

Inherited methods

def await: A

Await the completion of the first Rx result. This method is available only in Scala JVM.

Await the completion of the first Rx result. This method is available only in Scala JVM.

Note: Generally speaking, blocking operations should be avoided in reactive programming. Use this method only for testing purpose. Both airframe-http and AirSpec supports evaluating Rx[X] result (async) in a non-blocking way.

Attributes

Returns

the result

Inherited from:
RxOps
def parents: Seq[RxOps[_]]

Attributes

Inherited from:
RxOps
def recover[U](f: PartialFunction[Throwable, U]): Rx[U]

Recover from a known error and emit a replacement value

Recover from a known error and emit a replacement value

Attributes

Inherited from:
RxOps
def recoverWith[A](f: PartialFunction[Throwable, RxOps[A]]): Rx[A]

Recover from a known error and emit replacement values from a given Rx

Recover from a known error and emit replacement values from a given Rx

Attributes

Inherited from:
RxOps
def run[U](effect: A => U): Cancelable

Evaluate this Rx[A] and apply the given effect function. Once OnError(e) or OnCompletion is observed, it will stop the evaluation.

Evaluate this Rx[A] and apply the given effect function. Once OnError(e) or OnCompletion is observed, it will stop the evaluation.

Attributes

Inherited from:
RxOps
def runContinuously[U](effect: A => U): Cancelable

Keep evaluating Rx[A] even if OnError(e) or OnCompletion is reported. This is useful for keep processing streams.

Keep evaluating Rx[A] even if OnError(e) or OnCompletion is reported. This is useful for keep processing streams.

Attributes

Inherited from:
RxOps
def subscribe[U](subscriber: A => U): Cancelable

Attributes

Inherited from:
RxOps
def tap(f: A => Unit): Rx[A]

Applies f to the value for having a side effect, and return the original value.

Applies f to the value for having a side effect, and return the original value.

The difference from tapOn is that this method will not receive an input failure.

Value parameters

f

side-effect function used when observing a value

Attributes

Returns

the original Rx event

Inherited from:
RxOps
def tapOn(f: PartialFunction[Try[A], Unit]): Rx[A]

Applies f to the value for having a side effect, and return the original value.

Applies f to the value for having a side effect, and return the original value.

This method is useful for debugging Rx chains. For example:

 rx.tapOn {
   case Success(v) => debug(s"received ${v}")
   case Failure(e) => error(s"request failed", e)
 }

Value parameters

f

partial function for the side effect

Attributes

Returns

the original Rx event

Inherited from:
RxOps
def tapOnFailure(f: Throwable => Unit): Rx[A]

Applies f to the error if it happens, and return the original value.

Applies f to the error if it happens, and return the original value.

This method is useful for logging the error.

Value parameters

f

side-effect function used when observing an error

Attributes

Returns

the original Rx event

Inherited from:
RxOps