新闻中心

JS怎样在Spring中实现异步调用_JS在Spring中实现异步调用的完整教程

2025-11-15
浏览次数:
返回列表
前端J*aScript通过fetch或axios发起异步请求,调用Spring Boot后端接口;Spring使用@EnableAsync启用异步支持,@Async注解实现异步方法,配合DeferredResult非阻塞返回结果,提升系统响应能力。

js怎样在spring中实现异步调用_js在spring中实现异步调用的完整教程

J*aScript 本身是前端语言,而 Spring 是基于 J*a 的后端框架,因此“JS 在 Spring 中实现异步调用”这个说法需要澄清:通常是指前端 J*aScript 发起异步请求(如 AJAX),调用 Spring 后端提供的异步接口。下面将从前后端配合的角度,完整说明如何实现这一过程。

前端:使用 JS 发起异步请求

前端通过 J*aScript(或现代框架如 Vue、React)发送异步 HTTP 请求到 Spring 服务。常用方式包括原生 fetchaxios 库。

示例:使用 fetch 发起 GET 请求

fetch('/api/data', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

示例:使用 axios 发送 POST 请求

axios.post('/api/data', { name: 'test' })
  .then(response => {
    console.log('Success:', response.data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

这些请求默认就是异步的,不会阻塞页面渲染。

后端:Spring Boot 实现异步处理

为了让 Spring 接口支持真正的异步执行(即不占用主线程),需使用 Spring 的 @Async 注解。

1. 启用异步支持

在主启动类上添加 @EnableAsync

@SpringBootApplication
@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2. 创建异步服务方法

定义一个服务类,使用 @Async 标记方法:

Visla Visla

AI视频生成器,快速轻松地将您的想法转化为视觉上令人惊叹的视频。

Visla 100 查看详情 Visla

@Service
public class AsyncService {

    @Async
    public CompletableFuture<String> doSomething() {
        try {
            Thread.sleep(3000); // 模拟耗时操作
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return CompletableFuture.completedFuture("Task Done");
    }
}

3. 控制器返回异步结果

Controller 接收请求并调用异步服务:

@RestController
@RequestMapping("/api")
public class DataController {

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/data")
    public DeferredResult<String> getData() {
        DeferredResult<String> result = new DeferredResult<>();

        asyncService.doSomething().whenComplete((data, ex) -> {
            if (ex != null) {
                result.setErrorResult(ex);
            } else {
                result.setResult(data);
            }
        });

        return result;
    }
}

这里使用 DeferredResult 可以让 Controller 异步返回结果,避免阻塞请求线程。

跨域问题处理

前端 JS 与 Spring 后端常处于不同端口,需配置跨域访问权限。

在 Controller 上添加 @CrossOrigin

@CrossOrigin(origins = "http://localhost:3000") // 允许前端域名
@RestController
public class DataController { ... }

或全局配置跨域

@Configuration
public class CorsConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                        .allowedOrigins("http://localhost:3000")
                        .allowedMethods("GET", "POST", "PUT", "DELETE");
            }
        };
    }
}

测试流程

假设前端运行在 http://localhost:3000,后端在 http://localhost:8080

  • 前端页面加载后,执行 JS 脚本发起 fetch 请求
  • Sprong Boot 接收到请求,交由异步服务处理
  • 主线程不被阻塞,可处理其他请求
  • 异步任务完成后,结果返回给前端,触发 then 回调

基本上就这些。整个链路实现了 JS 发起异步调用,Spring 完成异步处理,提升系统响应能力。关键点在于前后端分离架构下,正确使用异步注解和非阻塞返回机制。

以上就是JS怎样在Spring中实现异步调用_JS在Spring中实现异步调用的完整教程的详细内容,更多请关注其它相关文章!


# 滑块  # 锦州抖音推广营销  # 长兴网站优化公司  # 潼南的网站推广哪家好  # 怎么推广香港网站呢  # 网站专业建设服务有哪些  # 营销推广纬度分析怎么写  # 关键词是怎样排名的  # 中山英文seo  # 正规网站优化服务是什么  # 云浮网站推广代运营招聘  # 解决问题  # 中文网  # 相关文章  # 是指  # 这一  # js开发spring教程  # 您的  # 如何使用  # 加载  # 后端  # a  # app  # ajax  # json  # 前端  # js  # java  # javascript  # react  # vue 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  如何在 Windows 11 中启动游戏手柄设置  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  快速CSGO开箱网站指南 CSGO开箱平台推荐  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  “在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法  将JSON对象数组转置为键值对列表的实用指南  Win10双系统截图高效法 截屏快捷键速记【技巧】  京东单号查询入口_京东快递订单追踪入口  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  解决深度学习模型训练初期异常高损失与完美验证准确率问题  J*aScript生成器_j*ascript异步迭代  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  树莓派传感器触发:通过Twilio API发送WhatsApp消息教程  基于动态规划的房屋花卉种植最小成本算法详解  DLsite中文平台入口 DLsite官网内容在线查看  jQuery Mask 插件中实现电话号码固定前导零的教程  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  Pyrogram与g4f集成:异步编程实践与常见错误解决  mc.js免安装版 mc.js一键畅玩入口  C#中解析不规范的HTML为XML 常见的坑与解决办法  在React函数组件中利用原生HTML5进行邮箱地址验证  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  如何使 Jest 模拟函数默认抛出错误以提高测试效率  深入理解J*aScript中的B样条曲线与节点向量生成  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口  Angular中父组件异步更新子组件复选框状态的实践指南  Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略  圆通快递查询实时追踪 圆通物流包裹状态快速查看  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  网站内容防复制粘贴的实现策略与局限性  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验  Bing引擎入口最新2025 Bing搜索免费官方登录  深入理解J*a链表中的IPosition接口与使用  css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道  在哪找SublimeJ远程工具_SFTP插件配置教程  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  EMS快递官网app_中国邮政速递物流手机客户端 

搜索