什么是 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', {}));
打赏作者
您的打赏是我前进的动力
微信
支付宝
leetcode🧑💻 216. 组合总和 III
上一篇
评论