chenyc
2025-12-09 545c24c6a711d71b65f3d4e8122fee3837fb1edc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { TResolveSetResponseResultPromise } from '../types';
 
export const createSetTimeoutCallback = (performance: Pick<Performance, 'now'>, setTimeout: (typeof globalThis)['setTimeout']) => {
    const setTimeoutCallback = (
        expected: number,
        identifiersAndResolvers: Map<number, [number, TResolveSetResponseResultPromise]>,
        resolveSetResponseResultPromise: TResolveSetResponseResultPromise,
        timerId: number
    ) => {
        const remainingDelay = expected - performance.now();
 
        if (remainingDelay > 0) {
            identifiersAndResolvers.set(timerId, [
                setTimeout(setTimeoutCallback, remainingDelay, expected, identifiersAndResolvers, resolveSetResponseResultPromise, timerId),
                resolveSetResponseResultPromise
            ]);
        } else {
            identifiersAndResolvers.delete(timerId);
            resolveSetResponseResultPromise(true);
        }
    };
 
    return setTimeoutCallback;
};