directus
1import { performance } from 'perf_hooks';2
3/**
4* Wait a specific time to meet the stall ms. Useful in cases where you need to make sure that every
5* path in a function takes at least X ms (for example authenticate).
6*
7* @param {number} ms - Stall time to wait until
8* @param {number} start - Current start time of the function
9*
10* @example
11*
12* ```js
13* const STALL_TIME = 100;
14*
15* // Function will always take (at least) 100ms
16* async function doSomething() {
17* const timeStart = performance.now();
18*
19* if (something === true) {
20* await heavy();
21* }
22*
23* stall(STALL_TIME, timeStart);
24* return 'result';
25* }
26* ```
27*/
28export async function stall(ms: number, start: number): Promise<void> {29const now = performance.now();30const timeElapsed = now - start;31const timeRemaining = ms - timeElapsed;32
33if (timeRemaining <= 0) return;34
35return new Promise((resolve) => setTimeout(resolve, timeRemaining));36}
37