• Оборачивает асинхронную функцию. При повторных вызовах, все предыдущие функции будут получать сигнал отмены.

    Type Parameters

    • P extends unknown[] = []
    • R = void

    Parameters

    • func: (...params: P) => Promise<R>

      Асинхронная функция.

    • OptionalonCancelValue: R

      Возвращаемое значение при отмене. По умолчанию undefined.

    Returns (...params: P) => Promise<R> & { dispose: VoidFunction }

    Декорированная асинхронная функция.

    const f = promiseNoRace(async () => {
    return await giveMeFive();
    }, -1);
    await Promise.all([f(), f()]); // -1, 5

    Если метод api не поддерживает отмену, то можно явно сделать проверки на отмену операции:

    const f = promiseNoRace(async () => {
    const [signal] = CancellationContext.current?.getSignal()!;
    const result = await giveMeFiveWithNoCancellation();
    if (signal.aborted) {
    return -1;
    }
    return result;
    });
    await Promise.all([f(), f()]); // -1, 5
    f.dispose();
MMNEPVFCICPMFPCPTTAAATR