react-native-worklets
Version:
The React Native multithreading library
32 lines (30 loc) • 1.09 kB
JavaScript
;
export function setupSetTimeout() {
'worklet';
const timeoutHandleToRafHandle = new Map();
const setTimeoutPolyfill = (callback, delay = 1, ...args) => {
const start = performance.now();
let timeoutHandle = 0;
const rafCallback = () => {
const now = performance.now();
if (now - start >= delay) {
callback(...args);
timeoutHandleToRafHandle.delete(timeoutHandle);
} else {
const rafHandle = requestAnimationFrame(rafCallback);
timeoutHandleToRafHandle.set(timeoutHandle, rafHandle);
}
};
timeoutHandle = requestAnimationFrame(rafCallback);
timeoutHandleToRafHandle.set(timeoutHandle, timeoutHandle);
return timeoutHandle;
};
const clearTimeoutPolyfill = timeoutHandle => {
const rafHandle = timeoutHandleToRafHandle.get(timeoutHandle);
timeoutHandleToRafHandle.delete(timeoutHandle);
cancelAnimationFrame(rafHandle);
};
globalThis.setTimeout = setTimeoutPolyfill;
globalThis.clearTimeout = clearTimeoutPolyfill;
}
//# sourceMappingURL=setTimeoutPolyfill.js.map