美团

二面

用 promise 实现一个请求超时功能

实现关键在于 promise 的状态改变是单向且唯一的,即只能由 pending -> fulfilled 或者 pending -> rejected,所以可以使用 resolve + setTimeout 来实现。

    function promiseWithTimeout(url, delay = 3000) {
      return new Promise((resolve, reject) => {
        setTimeout(function () {
          reject(Error('time is out!'))
        }, delay)
        fetch(url).then(data => resolve(data.json()))
      })
    }
Last Updated:
Contributors: leeguooooo