当前位置: 首页 > wzjs >正文

没有网站怎么做CPCbaiduseoguide

没有网站怎么做CPC,baiduseoguide,深圳网站设计首选柚米,专做展厅设计网站JavaScript 异步编程与请求取消全指南 涵盖:同步/异步、Promise、async/await、AbortController、前后端协作 一、同步与异步 1. 同步(Synchronous) 定义:代码按顺序执行,前一步完成才能执行下一步。特点&#xff1…

JavaScript 异步编程与请求取消全指南

涵盖:同步/异步、Promise、async/await、AbortController、前后端协作


一、同步与异步

1. 同步(Synchronous)

  • 定义:代码按顺序执行,前一步完成才能执行下一步。
  • 特点:阻塞主线程,适合简单逻辑。
  • 示例
    console.log("步骤1");  
    console.log("步骤2"); // 必须等待步骤1完成
    

2. 异步(Asynchronous)

  • 定义:代码非阻塞执行,任务完成后通过回调、Promise 或事件通知结果。
  • 特点:高效但复杂度高,适合网络请求、I/O 操作。
  • 示例
    setTimeout(() => console.log("异步任务"), 1000);  
    console.log("继续执行"); // 立即执行
    

二、Promise 核心知识

1. 基本概念

  • 状态Pending(进行中)、Fulfilled(成功)、Rejected(失败)。
  • 创建与使用
    const promise = new Promise((resolve, reject) => {setTimeout(() => resolve("成功"), 1000);
    });
    promise.then(result => console.log(result));  
    

2. 链式调用与静态方法

  • 链式调用
    fetch(url).then(response => response.json()).catch(error => console.error(error));
    
  • 静态方法
    • Promise.all():所有成功返回结果数组。
    • Promise.race():返回第一个完成的结果。

三、async/await 进阶

1. 基本用法

  • async 函数:隐式返回 Promise。
  • await:等待 Promise 完成并提取结果。
    async function fetchData() {const data = await fetch(url);return data.json();
    }
    

2. 错误处理

  • try...catch:捕获异步错误。
    async function safeFetch() {try {const data = await fetch(url);} catch (error) {console.error("请求失败:", error);}
    }
    

3. 并发控制

  • 串行
    await task1();  
    await task2(); // 等待 task1 完成
    
  • 并行
    const [res1, res2] = await Promise.all([task1(), task2()]);
    

四、请求取消:AbortController

1. 核心功能

  • 中断异步操作(如 fetch 请求)。
  • 核心对象
    • AbortController:生成中断信号。
    • AbortSignal:传递给异步任务。

2. 使用示例

const controller = new AbortController();// 发起请求并传递信号
fetch(url, { signal: controller.signal }).catch(error => {if (error.name === "AbortError") {console.log("请求已取消");}});// 用户点击取消按钮
document.getElementById("cancel-btn").onclick = () => controller.abort();

3. 超时自动取消

async function fetchWithTimeout(url, timeoutMs) {const controller = new AbortController();const timeoutId = setTimeout(() => controller.abort(), timeoutMs);try {const response = await fetch(url, { signal: controller.signal });clearTimeout(timeoutId); // 请求成功时清除定时器return response.json();} catch (error) {if (error.name === "AbortError") {throw new Error(`超时(${timeoutMs}ms)`);}}
}

五、后端处理请求取消(Java/Spring Boot)

1. 默认行为

  • 客户端断开后,服务器继续执行任务
  • 示例
    @GetMapping("/data")
    public String longTask() throws InterruptedException {Thread.sleep(5000); // 即使客户端断开仍会执行return "完成";
    }
    

2. 主动终止任务

  • 监听连接中断(使用 DeferredResult):
    @GetMapping("/async")
    public DeferredResult<String> asyncTask() {DeferredResult<String> deferredResult = new DeferredResult<>();Future<?> future = executor.submit(() -> {try {Thread.sleep(5000);deferredResult.setResult("完成");} catch (InterruptedException e) {deferredResult.setErrorResult("已取消");}});// 客户端断开时取消任务deferredResult.onCompletion(() -> future.cancel(true));return deferredResult;
    }
    

3. 数据库查询超时

@Query(value = "SELECT * FROM large_table", timeout = 5) // 5秒超时
List<Record> findLargeData();

六、关键问题解答

1. 客户端取消请求后,后端是否继续执行?

  • 默认继续执行,需后端主动监听连接中断事件并终止任务。

2. 为什么需要 async 函数?

  • 语法要求await 必须在 async 函数内使用。
  • 隐式返回 Promise:方便异步操作的值传递。

3. 如何避免回调地狱?

  • 使用 Promise 链式调用async/await

七、最佳实践

  1. 前端
    • 使用 AbortController 取消不再需要的请求。
    • 超时设置避免长时间等待。
  2. 后端
    • 监听客户端断开事件,终止耗时操作。
    • 数据库操作设置查询超时。
  3. 通用
    • 关键业务设计幂等性逻辑(如支付去重)。

总结:异步编程需兼顾效率与资源管理,合理使用取消机制可显著提升应用性能和用户体验。

http://www.dtcms.com/wzjs/128281.html

相关文章:

  • 攀枝花建设工程有限责任公司网站微信app小程序开发
  • 免费ppt模板网站哪个好用上海网络推广服务
  • java电商网站开发源码推广产品的方法
  • 某互联网公司触屏网站高端网站建设公司排名
  • 网站建设维护费一年多少钱识别关键词软件
  • 江西省住房和城乡建设网站网络营销的内容
  • 广告设计网站建设怎么做关键词的选取原则
  • 无许可证做新闻网站会怎么样优化seo可以从以下几个方面进行
  • 如何在建设教育协会网站注册考试seo优化排名
  • 毕业设计做网站论文好写吗网站推广的主要方式
  • 常州微信网站制作国内优秀网站案例
  • wordpress调用指定文章图片采集站seo提高收录
  • 网站建设费用分录如何结合搜索检索与seo推广
  • 任务网站的接口怎么做seo公司 引擎
  • 长春网站制作最专业江东seo做关键词优化
  • 上海网站建设服务公司产品市场调研怎么做
  • 仁怀网站建设关键字优化用什么系统
  • 网站不换域名换空间国家大事新闻近三天
  • visual studio做网站举三个成功的新媒体营销案例
  • wordpress右下角广告代码网站搜索优化方法
  • 上海建设网站公司武汉seo优化分析
  • 无锡市新区建设环保局网站爱站工具包手机版
  • 南京网站建设seo的理解
  • 网站开发私人培训东莞网站关键词优化公司
  • 公司如何登录网站做就业登记腾讯企业qq
  • 动画制作软件手机版多合一seo插件破解版
  • 地产公司网站建设方案国外网站seo免费
  • 安阳政府网官网seo关键词排名优化怎么收费
  • 上海平台网站制作公司哪家好西安百度竞价托管
  • 如何在自己电脑上做网站互联网登录的网站名