viem
Version:
26 lines • 849 B
JavaScript
const concurrentCounts = new Map();
/**
* Detects if there are concurrent tasks occuring for a given key
* within the same event loop tick. Registers the request, yields to allow
* other concurrent calls to register, then returns whether multiple requests
* were detected.
*
* @example
* ```ts
* const isConcurrent = await Concurrent.detect(address)
* ```
*/
export async function detect(key) {
concurrentCounts.set(key, (concurrentCounts.get(key) ?? 0) + 1);
await Promise.resolve();
const isConcurrent = (concurrentCounts.get(key) ?? 0) > 1;
queueMicrotask(() => {
const count = concurrentCounts.get(key) ?? 0;
if (count <= 1)
concurrentCounts.delete(key);
else
concurrentCounts.set(key, count - 1);
});
return isConcurrent;
}
//# sourceMappingURL=concurrent.js.map