diff --git a/utils/withTimeout.js b/utils/withTimeout.js new file mode 100644 index 0000000..d48fab4 --- /dev/null +++ b/utils/withTimeout.js @@ -0,0 +1,21 @@ +function withTimeout(promise, timeout) { + if (!promise || typeof promise.then !== 'function') { + return Promise.reject(new Error('Invalid promise provided')); + } + if (timeout <= 0) { + return Promise.reject(new RangeError('Timeout must be greater than 0')); + } + let timerId; + + const timeoutPromise = new Promise((_, reject) => { + timerId = setTimeout(() => { + reject(new Error(`Operation timed out after ${timeout} ms`)); + }, timeout); + }); + + return Promise.race([promise, timeoutPromise]) + .finally(() => { + clearTimeout(timerId); + }); +} +export { withTimeout }; \ No newline at end of file