js fetch请求中断的几种方式

1、通过AbortController

这是官方标准手段,真正意义的阻止请求(不支持ie)

后端接口设置的两秒返回数据

js 复制代码
function myFetch() {
    const controller = new AbortController();
    const signal = controller.signal;

    fetch('http://localhost:3000/aaa/bbb', {
        method: 'post',
        signal,
        headers: {
            'Content-Type': 'application/json'
        }
    }).then(res => res.json()).then(res => {
        console.log(res);
        return res;
    }).catch(e => {
        console.log(e);
    })

    // setTimeout(()=> {
    //     controller.abort();
    // }, 1000)
}

默认结果:

解开定时器后:

2、模拟中断

通过promise,成功用resolve返回,失败用reject返回(浏览器上,请求依然会发出,并得到响应)

第一种方法:

js 复制代码
function getData() {
    return new Promise((resolve, reject) => {
        myFetch().then(res => {
            resolve(res);
        });
        setTimeout(() => {
            reject({
                code: '500',
                msg: '请求失败'
            })
        }, 1000);
    })
}

async function gotData() {
    try {
        const data = await getData();
        console.log(data);
    } catch (error) {
        console.log(error);
    }
}
gotData();

运行结果:

第二种方法:

js 复制代码
function getData() {
    let myReject = null;
    let myPromise = new Promise((resolve, reject) => {
        myReject = reject;
        myFetch().then(res => {
            resolve(res);
        });
    });

    myPromise.abort = () => myReject({
        code: '500',
        msg: '请求失败'
    });
    return myPromise;
}

async function gotData() {
    const result = getData();
    result.then(res => {
        console.log(res);
    }).catch(e => {
        console.log(e);
    })
    setTimeout(() => {
        result.abort();
    }, 1000);
}
gotData();
相关推荐
原来是猿1 分钟前
QT初识【创建项目+对象树】
开发语言·qt
用户游民1 分钟前
Android 项目aab包上传谷歌平台需支持16KB页面
前端
SevgiliD5 分钟前
后台下载:获取响应头文件名
前端
Hejjon9 分钟前
Vue3 页面刷新时在 onMounted 里获取到的path 一直是 / 问题
前端
长安第一美人10 分钟前
算能 BM1688 低延迟推流:Qt+WebSocket 直出 H5/HDMI
开发语言·网络·嵌入式硬件·websocket·交互
yuki_uix15 分钟前
CSS 里的"结界":BFC 与层叠上下文的渲染隔离逻辑
前端·面试
lhbian18 分钟前
C++、C与易语言:编程语言对比解析
c语言·开发语言·c++
꧁细听勿语情꧂18 分钟前
数据结构概念和算法、时间复杂度、空间复杂度引入
c语言·开发语言·数据结构·算法
说实话起个名字真难啊20 分钟前
2026数字中国创新大赛数字安全赛道writeup之web题目一
java·前端·安全
jerrywus36 分钟前
Claude Code 真正的用法:skill / agent / hooks / worktree 一篇全搞定
前端·agent·claude