接收一个Promise和超时时间,如果超过指定的时间仍未resolve或reject,则返回一个失败的Promise。
关键点:新建个Promise并且加上延迟方法,再用race执行这两个函数。
function promiseTimeout(promise, timeout) {
let timer;
const timeoutPromise = new Promise((resolve, reject) => {
timer = setTimeout(() => {
reject(new Error('Promise timed out'));
}, timeout);
});
return Promise.race([promise, timeoutPromise]).finally(() => {
clearTimeout(timer);
});
}