React JS结合Express:能否实现多路由请求及多次使用await fetch
问题核心解答
1. 连续使用两次await fetch的合法性
完全支持在async函数内连续使用多次await fetch,不存在语法层面的禁止规则:
- 如果业务上请求有前后依赖(比如先发新增行程的POST请求,拿到返回的新增记录ID后,再发请求拉取该条记录的详细信息),直接按业务顺序连续写await即可,代码会等前一个请求拿到响应后,再执行下一个请求。
- 如果多个请求之间没有任何依赖关系,更推荐用
Promise.all做并发请求,比串行连续await的加载速度更快:// 无依赖多请求并发示例 const [addResp, listResp] = await Promise.all([ fetch("http://localhost:5000/todos", { method: "POST", /* 原有配置 */ }), fetch("http://localhost:5000/todos?recent=10") ])
2. 替代单接口请求、一次获取多资源的实现方案
结合你当前的行程提交代码场景,有两种可落地的实现路径:
- 前端聚合请求:也就是前面提到的,在同一个提交处理函数里,根据需要发起多个独立的fetch请求,按照依赖关系选择串行await或者并发调用。需要特别注意你当前代码的逻辑问题:你现在在await完POST请求后立刻执行了
window.location = "/"整页跳转,如果要加第二个fetch请求,必须等第二个请求的响应处理完成后再执行跳转,否则刚发出第二个请求页面就会被重载,请求会被直接中断,拿不到预期的响应结果。 - 后端聚合接口:在Express端新增一个专门的聚合路由,路由内部一次性完成多类资源的查询、写入操作,把所有前端需要的返回值打包成统一的JSON响应返回。这种方式前端只需要发一次fetch请求,既减少了网络握手的开销,也不用重复配置请求头、重复处理跨域问题。
内容的提问来源于stack exchange,提问作者StudioMan
相关产品推荐
相关产品推荐

