TxSubscriptionRef
Stores transactional state and publishes committed changes.
A TxSubscriptionRef<A> combines a TxRef<A> for the current value with a transactional pub/sub channel for updates. Subscribers first receive the current value and then every later value that is published by committed updates. This module includes constructors, reads, writes, update and modify helpers, transactional-queue subscriptions, stream subscriptions, and a guard.
Constructors
Getters
Reads the current value of the TxSubscriptionRef.
When to use
Use to read the current TxSubscriptionRef value without subscribing to future changes.
See
changesfor reading the current value and subsequent updates
Signature
declare function get<A>(self: TxSubscriptionRef<A>): Effect<A>;Guards
isTxSubscriptionRef
Checks whether the given value is a TxSubscriptionRef.
When to use
Use to narrow an unknown value before treating it as a TxSubscriptionRef.
See
makefor creating aTxSubscriptionRef
Signature
declare function isTxSubscriptionRef(u: unknown): u is TxSubscriptionRef<unknown>;Models
TxSubscriptionRef interface
A TxSubscriptionRef is a transactional reference that allows subscribing to all committed changes. Subscribers receive the current value followed by every subsequent update via a transactional dequeue.
When to use
Use to store transactional state whose committed changes must be observable by subscribers.
See
makefor creating a transactional subscription referencechangesfor subscribing through a transactional queuechangesStreamfor subscribing through aStream
Signature
interface TxSubscriptionRef<in out A> extends Inspectable, Pipeable {
readonly "~effect/transactions/TxSubscriptionRef": "~effect/transactions/TxSubscriptionRef";
}Mutations
Gets the current value and sets a new value atomically. Publishes the new value to all subscribers.
When to use
Use to replace a TxSubscriptionRef value while returning the previous value and publishing the update to subscribers.
See
setfor setting without returning the previous valuegetAndUpdatefor deriving the new value from the previous value
Signature
declare const getAndSet: {
<A>(value: A): (self: TxSubscriptionRef<A>) => Effect<A>;
<A>(self: TxSubscriptionRef<A>, value: A): Effect<A>;
};getAndUpdate
Gets the current value and updates it using a function atomically. Publishes the new value to all subscribers.
When to use
Use to derive and publish a new TxSubscriptionRef value while returning the previous value.
See
updatefor updating without returning the previous valueupdateAndGetfor returning the new value instead
Signature
declare const getAndUpdate: {
<A>(f: (current: A) => A): (self: TxSubscriptionRef<A>) => Effect<A>;
<A>(self: TxSubscriptionRef<A>, f: (current: A) => A): Effect<A>;
};Modifies the value of the TxSubscriptionRef using a function that returns both a result and the new value. The new value is published to all subscribers atomically.
When to use
Use to compute a separate return value and next TxSubscriptionRef state in one transactional update.
See
Signature
declare const modify: {
<A, B>(
f: (current: A) => [returnValue: B, newValue: A],
): (self: TxSubscriptionRef<A>) => Effect<B>;
<A, B>(self: TxSubscriptionRef<A>, f: (current: A) => [returnValue: B, newValue: A]): Effect<B>;
};Sets the value of the TxSubscriptionRef and publishes the new value to all subscribers.
When to use
Use to replace the current TxSubscriptionRef value with a known value and publish it.
See
Signature
declare const set: {
<A>(value: A): (self: TxSubscriptionRef<A>) => Effect<void>;
<A>(self: TxSubscriptionRef<A>, value: A): Effect<void>;
};Updates the value of the TxSubscriptionRef using a function and publishes the new value to all subscribers.
When to use
Use to derive the next TxSubscriptionRef value from the current value and publish it.
See
setfor replacing the value directlyupdateAndGetfor returning the new value after the update
Signature
declare const update: {
<A>(f: (current: A) => A): (self: TxSubscriptionRef<A>) => Effect<void>;
<A>(self: TxSubscriptionRef<A>, f: (current: A) => A): Effect<void>;
};updateAndGet
Updates the value using a function and returns the new value. Publishes the new value to all subscribers.
When to use
Use to derive and publish a new TxSubscriptionRef value while returning that new value.
See
updatefor updating without returning the new valuegetAndUpdatefor returning the previous value instead
Signature
declare const updateAndGet: {
<A>(f: (current: A) => A): (self: TxSubscriptionRef<A>) => Effect<A>;
<A>(self: TxSubscriptionRef<A>, f: (current: A) => A): Effect<A>;
};Subscriptions
Subscribes to all changes of the TxSubscriptionRef. Returns a scoped TxDequeue that first yields the current value, then every subsequent update.
When to use
Use to subscribe to TxSubscriptionRef committed changes through a scoped transactional queue.
See
changesStreamfor subscribing through aStream
Signature
declare function changes<A>(self: TxSubscriptionRef<A>): Effect<TxQueue<A, never>, never, Scope>;changesStream
Returns a Stream of all changes to the TxSubscriptionRef, starting with the current value followed by every subsequent update.
When to use
Use to consume TxSubscriptionRef committed changes as a Stream.
See
changesfor subscribing through a transactional queue
Signature
declare function changesStream<A>(self: TxSubscriptionRef<A>): Stream<A, never, never>;
Creates a new TxSubscriptionRef with the specified initial value.
When to use
Use to create a
TxSubscriptionRefthat publishes every committed update to subscribers.See
changesfor subscribing to the created reference