BaseObservable
This trait represents a reactive value that can be subscribed to.
This trait represents a reactive value that can be subscribed to.
It has only one direct subtype, Observable, which in turn has two direct subtypes, EventStream and Signal.
BaseObservable is the same as Observable, it just lives in a separate trait for technical reasons (the Self type param).
All Observables are lazy. An Observable starts when it gets its first observer (internal or external), and stops when it loses its last observer (again, internal or external).
Basic idea: Lazy Observable only holds references to those children that have any observers (either directly on themselves, or on any of their descendants). What this achieves:
- Stream only propagates its value to children that (directly or not) have observers
- Stream calculates its value only once regardless of how many observers / children it has) (so, all streams are "hot" observables)
- Stream doesn't hold references to Streams that no one observes, allowing those Streams to be garbage collected if they are otherwise unreachable (which they should become when their subscriptions are killed by their owners)
Value members
Abstract methods
Create a new observable that listens to this one and has a debugger attached.
Create a new observable that listens to this one and has a debugger attached.
Use the resulting observable in place of the original observable in your code. See docs for details.
There are more convenient methods available implicitly from DebuggableObservable and DebuggableSignal, such as debugLog(), debugSpyEvents(), etc.
Concrete methods
- Value Params
- compose
Note: guarded against exceptions
Create an external observer from a function and subscribe it to this observable.
Create an external observer from a function and subscribe it to this observable.
Note: since you won't have a reference to the observer, you will need to call Subscription.kill() to unsubscribe
value
is passed by name, so it will be evaluated whenever the Observable fires.
Use it to sample mutable values (e.g. myInput.ref.value in Laminar).
value
is passed by name, so it will be evaluated whenever the Observable fires.
Use it to sample mutable values (e.g. myInput.ref.value in Laminar).
See also: mapToStrict
- Value Params
- value
Note: guarded against exceptions
value
is evaluated strictly, only once, when this method is called.
value
is evaluated strictly, only once, when this method is called.
See also: mapTo
This method is fired when this observable starts working (listening for parent events and/or firing its own events), that is, when it gets its first Observer (internal or external).
This method is fired when this observable stops working (listening for parent events and/or firing its own events), that is, when it loses its last Observer (internal or external).
Inherited methods
This is the method that subclasses override to preserve the user's ability to set custom display names.
This is the method that subclasses override to preserve the user's ability to set custom display names.
- Inherited from
- Named
Set the display name for this instance (observable or observer).
Set the display name for this instance (observable or observer).
- This method modifies the instance and returns
this
. It does not create a new instance. - New name you set will override the previous name, if any. This might change in the future. For the sake of sanity, don't call this more than once for the same instance.
- If display name is set, toString will output it instead of the standard type@hashcode string
- Inherited from
- Named
Override defaultDisplayName instead of this, if you need to.
Override defaultDisplayName instead of this, if you need to.