1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.createRace = void 0;
- /**
- * Constructs a function that will only invoke the first function passed to it
- * concurrently. Once the function has been executed, the racer will be reset
- * and the next invocation will be allowed to execute.
- *
- * Example:
- *
- * ```ts
- * import {createRace} from 'thingies/es2020/createRace';
- *
- * const race = createRace();
- *
- * race(() => {
- * race(() => {
- * console.log('This will not be executed');
- * });
- * console.log('This will be executed');
- * });
- *
- * race(() => {
- * console.log('This will be executed');
- * });
- * ```
- *
- * @returns A "race" function that will only invoke the first function passed to it.
- */
- const createRace = () => {
- let invoked = false;
- return (fn) => {
- if (invoked)
- return;
- invoked = true;
- try {
- return fn();
- }
- finally {
- invoked = false;
- }
- };
- };
- exports.createRace = createRace;
|