Skip to main content

promiseTimeout

/**
* @template T
* @param {Promise<T>} promise
* @param {number} duration
* @return {Promise<T>}
*/
export default function promiseTimeout(promise, duration) {
return new Promise((resolve, reject) => {
const timeoutId = setTimeout(() => {
reject('Promise timeout');
}, duration);

Promise.resolve(promise).then(
(value) => {
clearTimeout(timeoutId);
resolve(value);
},
(reason) => {
clearTimeout(timeoutId);
reject(reason);
}
);
});
}