前端面试题 - 106. 实现一个Promise的限时执行函数(Timeout)

437 阅读1分钟

接收一个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);
  });
}