/** * Create an `Effect` that when executed will construct `promise` and wait for * its result, errors will be handled using `onReject`. * * @tsplus static effect/core/io/Effect.Ops tryCatchPromise */ export function tryCatchPromise( promise: LazyArg>, onReject: (reason: unknown) => E ): Effect { return Effect.tryCatch(promise, onReject).flatMap((promise) => Effect.async((resolve) => { promise .then((a) => resolve(Effect.succeed(a))) .catch((e) => resolve(Effect.fail(onReject(e)))) }) ) } /** * Create an `Effect` that when executed will construct `promise` and wait for * its result, errors will produce failure as `unknown`. * * @tsplus static effect/core/io/Effect.Ops tryPromise */ export function tryPromise( promise: LazyArg> ): Effect { return Effect.attempt(promise).flatMap((promise) => Effect.async((resolve) => { promise .then((a) => resolve(Effect.succeed(a))) .catch((e) => resolve(Effect.fail(e))) }) ) } /** * Like `tryPromise` but produces a defect in case of errors. * * @tsplus static effect/core/io/Effect.Ops promise */ export function promise( promise: LazyArg> ): Effect { return Effect.sync(promise).flatMap((promise) => Effect.async((resolve) => { promise .then((a) => resolve(Effect.succeed(a))) .catch((e) => resolve(Effect.die(e))) }) ) }