once

Asegura que una función solo se llame una vez, retornando el resultado cacheado.

#async #utility #singleton
export const once = <T extends (...args: unknown[]) => unknown>(fn: T) => {
let called = false;
let value: ReturnType<T>;
return (...args: Parameters<T>): ReturnType<T> => {
if (!called) {
called = true;
value = fn(...args) as ReturnType<T>;
}
return value;
};
};
// Usage
const initialize = once(() => {
console.log('Initializing...');
return { ready: true };
});
initialize(); // Initializing... { ready: true }
initialize(); // { ready: true } (cached, no log)

Comparte este snippet

Comentarios