ScopedRef.ts
ScopedRef.ts overview
Section titled “ScopedRef.ts overview”Stores a current value together with the scope that owns it.
A ScopedRef<A> is useful for resource-backed values such as clients,
connections, subscriptions, or handles. Replacing the value acquires the
replacement in a new scope and releases the resources owned by the previous
value. Reads can be effectful or synchronous, and updates are synchronized so
only one replacement happens at a time.
Since v2.0.0
Exports Grouped by Category
Section titled “Exports Grouped by Category”constructors
Section titled “constructors”fromAcquire
Section titled “fromAcquire”Creates a new ScopedRef from an effect that acquires the initial value.
When to use
Use when creating a ScopedRef whose initial value requires acquiring
resources that must be released.
See
makefor creating aScopedReffrom a value that does not require resource acquisition
Signature
declare const fromAcquire: <A, E, R>(acquire: Effect.Effect<A, E, R>) => Effect.Effect<ScopedRef<A>, E, Scope.Scope | R>Since v2.0.0
Creates a new ScopedRef from the specified value.
When to use
Use to create a ScopedRef when the initial value is already available or
can be produced without acquiring resources.
Details
The evaluate function runs when the returned effect runs. The returned
effect requires a Scope, and the reference closes the currently stored
value’s scope when that outer scope closes.
Gotchas
Do not use make for an initial value whose creation acquires resources; use
fromAcquire so acquisition and finalization are tracked.
See
fromAcquirefor creating aScopedReffrom an effect that acquires the initial valuesetfor replacing the current value with a newly acquired value
Signature
declare const make: <A>(evaluate: LazyArg<A>) => Effect.Effect<ScopedRef<A>, never, Scope.Scope>Since v2.0.0
getters
Section titled “getters”Retrieves the current value of the scoped reference effectfully.
When to use
Use to read the value currently stored in a ScopedRef inside an Effect
workflow.
See
getUnsafefor reading the current value synchronously when an unsafe read is acceptable
Signature
declare const get: <A>(self: ScopedRef<A>) => Effect.Effect<A>Since v2.0.0
getUnsafe
Section titled “getUnsafe”Retrieves the current value of the scoped reference synchronously.
When to use
Use when you need immediate synchronous access to the current ScopedRef
value and can guarantee that reading outside the Effect API is safe.
See
getfor Effect-wrapped access in Effect programs
Signature
declare const getUnsafe: <A>(self: ScopedRef<A>) => ASince v4.0.0
models
Section titled “models”ScopedRef (interface)
Section titled “ScopedRef (interface)”A ScopedRef is a reference whose value is associated with resources,
which must be released properly. You can both get the current value of any
ScopedRef, as well as set it to a new value (which may require new
resources). The reference itself takes care of properly releasing resources
for the old value whenever a new value is obtained.
When to use
Use when an application needs to keep a current resource-backed value and later replace it with another acquired value while ensuring the previous value is released.
Signature
export interface ScopedRef<in out A> extends Pipeable { readonly [TypeId]: typeof TypeId readonly backing: Synchronized.SynchronizedRef<readonly [Scope.Closeable, A]>}Since v2.0.0
setters
Section titled “setters”Sets the value of this reference to a newly acquired scoped value, releasing any resources associated with the old value.
When to use
Use to replace the current value of an existing ScopedRef with a newly
acquired scoped value while releasing resources for the previous value.
Details
This method will not return until either the reference is successfully changed to the new value, with old resources released, or until the attempt to acquire a new value fails.
Signature
declare const set: { <A, R, E>(acquire: Effect.Effect<A, E, R>): (self: ScopedRef<A>) => Effect.Effect<void, E, Exclude<R, Scope.Scope>> <A, R, E>(self: ScopedRef<A>, acquire: Effect.Effect<A, E, R>): Effect.Effect<void, E, Exclude<R, Scope.Scope>>}Since v2.0.0