Promise

final class Promise[E, A] extends Serializable

A promise represents an asynchronous variable, of zio.IO type, that can be set exactly once, with the ability for an arbitrary number of fibers to suspend (by calling await) and automatically resume when the variable is set.

Promises can be used for building primitive actions whose completions require the coordinated action of multiple fibers, and for building higher-level concurrent or asynchronous structures.

for {
 promise <- Promise.make[Nothing, Int]
 _       <- promise.succeed(42).delay(1.second).fork
 value   <- promise.await // Resumes when forked fiber completes promise
} yield value
Companion:
object
class Object
trait Matchable
class Any

Value members

Concrete methods

def await: IO[E, A]

Retrieves the value of the promise, suspending the fiber running the action until the result is available.

Retrieves the value of the promise, suspending the fiber running the action until the result is available.

def complete(io: IO[E, A]): UIO[Boolean]

Completes the promise with the result of the specified effect. If the promise has already been completed, the method will produce false.

Completes the promise with the result of the specified effect. If the promise has already been completed, the method will produce false.

Note that Promise.completeWith will be much faster, so consider using that if you do not need to memoize the result of the specified effect.

def completeWith(io: IO[E, A]): UIO[Boolean]

Completes the promise with the specified effect. If the promise has already been completed, the method will produce false.

Completes the promise with the specified effect. If the promise has already been completed, the method will produce false.

Note that since the promise is completed with an effect, the effect will be evaluated each time the value of the promise is retrieved through combinators such as await, potentially producing different results if the effect produces different results on subsequent evaluations. In this case te meaning of the "exactly once" guarantee of Promise is that the promise can be completed with exactly one effect. For a version that completes the promise with the result of an effect see Promise.complete.

Kills the promise with the specified error, which will be propagated to all fibers waiting on the value of the promise.

Kills the promise with the specified error, which will be propagated to all fibers waiting on the value of the promise.

def done(e: Exit[E, A]): UIO[Boolean]

Exits the promise with the specified exit, which will be propagated to all fibers waiting on the value of the promise.

Exits the promise with the specified exit, which will be propagated to all fibers waiting on the value of the promise.

def fail(e: E): UIO[Boolean]

Fails the promise with the specified error, which will be propagated to all fibers waiting on the value of the promise.

Fails the promise with the specified error, which will be propagated to all fibers waiting on the value of the promise.

def halt(e: Cause[E]): UIO[Boolean]

Halts the promise with the specified cause, which will be propagated to all fibers waiting on the value of the promise.

Halts the promise with the specified cause, which will be propagated to all fibers waiting on the value of the promise.

Completes the promise with interruption. This will interrupt all fibers waiting on the value of the promise as by the fiber calling this method.

Completes the promise with interruption. This will interrupt all fibers waiting on the value of the promise as by the fiber calling this method.

def interruptAs(fiberId: Id): UIO[Boolean]

Completes the promise with interruption. This will interrupt all fibers waiting on the value of the promise as by the specified fiber.

Completes the promise with interruption. This will interrupt all fibers waiting on the value of the promise as by the specified fiber.

Checks for completion of this Promise. Produces true if this promise has already been completed with a value or an error and false otherwise.

Checks for completion of this Promise. Produces true if this promise has already been completed with a value or an error and false otherwise.

def poll: UIO[Option[IO[E, A]]]

Checks for completion of this Promise. Returns the result effect if this promise has already been completed or a None otherwise.

Checks for completion of this Promise. Returns the result effect if this promise has already been completed or a None otherwise.

def succeed(a: A): UIO[Boolean]

Completes the promise with the specified value.

Completes the promise with the specified value.