• The observe middleware tracks an async function's state and runs callbacks when it fails with an error or succeeds.

    IMPORT_PATH: "@daiso-tech/core/async"

    Type Parameters

    • TParameters extends unknown[]
    • TReturn
    • TContext extends Partial<Record<string | symbol, unknown>>

    Parameters

    Returns AsyncMiddlewareFn<TParameters, TReturn, TContext>

    import { observe, LazyPromise } from "@daiso-tech/core/async";
    import { AsyncHooks, TimeSpan } from "@daiso-tech/core/utilities";

    await new AsyncHooks(
    // Lets pretend this function can throw and takes time to execute.
    async (a: number, b: number): Promise<number> => {
    const shouldThrow1 = Math.round(Math.random() * 100);
    if (shouldThrow1 > 50) {
    throw new Error("Unexpected error occured");
    }
    await LazyPromise.delay(TimeSpan.fromMilliseconds(Math.random() * 1000));
    const shouldThrow2 = Math.round(Math.random() * 100);
    if (shouldThrow2 > 50) {
    throw new Error("Unexpected error occured");
    }
    return a / b;
    },
    observe({
    onStart: (data) => console.log("START:", data),
    onSuccess: (data) => console.log("SUCCESS:", data),
    onError: (data) => console.error("ERROR:", data),
    onFinally: (data) => console.log("FINALLY:", data),
    })
    )
    .invoke(20, 10);
    // Will log when the function execution has started and the arguments.
    // Will log if the function succeded, the arguments and the return value.
    // Will log if the function errored, arguments and the error.
    // Will log the execution time and arguments