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();
相关推荐
luback12 小时前
前端把页面用PDF导出
前端·pdf·reactjs·html2canvas
豹哥学前端12 小时前
10分钟彻底搞懂 window 对象、全局环境与 JS 引擎
前端·面试
晴殇i12 小时前
前端混合状态管理架构:Redux Toolkit + Zustand 协同设计、规范落地与性能优化
前端·openai
zhangrelay12 小时前
三分钟云课实践速通--大学物理--python 版
linux·开发语言·python·学习·ubuntu·lubuntu
OpenTiny社区13 小时前
GenUI SDK 生成式UI:六大开发特性详解,适配多种业务场景
前端·github·ai编程
MegaDataFlowers13 小时前
调用Service层操作数据
java·开发语言
大家的林语冰13 小时前
TS 登顶第一语言;JS 最新 Temporal 时间减屎;Node 爆发反 AI 运动;CSS 将支持图片亮暗切换《前端周刊》
前端·javascript·css
Hilaku13 小时前
OpenClaw 为什么突然不火了?
前端·javascript·程序员
asdzx6713 小时前
使用 Python 读取 PDF: 提取文本和图片
开发语言·python·pdf
精益数智工坊13 小时前
物料管理是什么?物料管理的具体工作有哪些?
大数据·前端·数据库·人工智能·精益工程