Function concurrentHedging

  • The concurrentHedging middleware executes the primary function and all fallback functions concurrently. It returns the result of the first successful function and automatically aborts all remaining functions. If all function fail than error is thrown.

    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 { concurrentHedging } from "@daiso-tech/core/async";
    import { AsyncHooks } from "@daiso-tech/core/utilities";

    async function fn1(signal?: AbortSignal): Promise<unknown> {
    const response = await fetch("ENDPOINT-1", { signal });
    return await response.json();
    }
    async function fn2(signal?: AbortSignal): Promise<unknown> {
    const response = await fetch("ENDPOINT-2", { signal });
    return await response.json();
    }
    async function fn3(signal?: AbortSignal): Promise<unknown> {
    const response = await fetch("ENDPOINT-3", { signal });
    return await response.json();
    }
    const fetchData = new AsyncHooks(fn1, [
    concurrentHedging({
    fallbacks: [
    fn2,
    fn3
    ]
    })
    ], {
    signalBinder: {
    getSignal: (args) => args[0],
    forwardSignal: (args, signal) => {
    args[0] = signal;
    }
    }
    });

    console.log(await fetchData.invoke());