xstate
Version:
Finite State Machines and Statecharts for the Modern Web.
70 lines (69 loc) • 2.33 kB
TypeScript
import { AnyActorSystem } from "../system.js";
import { ActorLogic, ActorRefFrom, EventObject, NonReducibleUnknown, Snapshot } from "../types.js";
export type PromiseSnapshot<TOutput, TInput> = Snapshot<TOutput> & {
input: TInput | undefined;
};
export type PromiseActorLogic<TOutput, TInput = unknown> = ActorLogic<PromiseSnapshot<TOutput, TInput>, {
type: string;
[k: string]: unknown;
}, TInput, // input
AnyActorSystem, EventObject>;
export type PromiseActorRef<TOutput> = ActorRefFrom<PromiseActorLogic<TOutput, unknown>>;
/**
* An actor logic creator which returns promise logic as defined by an async process that resolves or rejects after some time.
*
* Actors created from promise actor logic (“promise actors”) can:
* - Emit the resolved value of the promise
* - Output the resolved value of the promise
*
* Sending events to promise actors will have no effect.
*
* @param promiseCreator
* A function which returns a Promise, and accepts an object with the following properties:
* - `input` - Data that was provided to the promise actor
* - `self` - The parent actor of the promise actor
* - `system` - The actor system to which the promise actor belongs
* @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed
*
* @example
* ```ts
* const promiseLogic = fromPromise(async () => {
* const result = await fetch('https://example.com/...')
* .then((data) => data.json());
*
* return result;
* });
*
* const promiseActor = createActor(promiseLogic);
* promiseActor.subscribe((snapshot) => {
* console.log(snapshot);
* });
* promiseActor.start();
* // => {
* // output: undefined,
* // status: 'active'
* // ...
* // }
*
* // After promise resolves
* // => {
* // output: { ... },
* // status: 'done',
* // ...
* // }
* ```
*/
export declare function fromPromise<TOutput, TInput = NonReducibleUnknown>(promiseCreator: ({ input, system }: {
/**
* Data that was provided to the promise actor
*/
input: TInput;
/**
* The actor system to which the promise actor belongs
*/
system: AnyActorSystem;
/**
* The parent actor of the promise actor
*/
self: PromiseActorRef<TOutput>;
}) => PromiseLike<TOutput>): PromiseActorLogic<TOutput, TInput>;