什么是 AbortController

AbortController 接口表示一个控制器对象,允许根据需要中止一个或多个 Web 请求

const AC = new AbortController(); // 构建一个 AbortController

fetch('www.baidu.com', { signal: AC.signal }) // signal 注入请求(可以终止请求抛出 error)
    .then(res => res.json())
    .then(res => {
        console.log(res);
    })
    .catch(err => {
        console.log("出错了!", err);
    })

// 也可以用 setTimeOut
setTimeOut(() => {
    AC.abort();
    console.log('终止请求');
}, 100)

利用 AbortController 实现

const createFetchWithTimeout = (timeOut = 1000) => {
    return (url, options) => {
        const singalController = new AbortController();

        setTimeout(() => {
            singalController.abort(); // 取消请求
            console.log('终止请求');
        }, timeOut);

        return fetch(url, { ...options, signal: singalController.signal });
    }
}

// 测试
const request = createFetchWithTimeout(100);
console.log(request('/1.js', {}));

利用 Promise.race 实现

const createFetchWithTimeout = (timeOut = 1000) => {
    return (url, options) => {
        return Promise.race([
            fetch(url, options),
            new Promise((resolve, reject) => {
                setTimeout(() => reject('fetch timeOut'), timeOut);
            })
        ]);
    };
};

// 测试
const request = createFetchWithTimeout(100);
console.log(request('/1.js', {}));
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 什么是 AbortController
  2. 2. 利用 AbortController 实现
  3. 3. 利用 Promise.race 实现