async/await 为什么没按顺序执行? UI春彦 提问于 2026-03-22 11:17:18 阅读 76 前端 我写了个函数想依次请求两个接口,但发现第二个请求没等第一个完成就发出去了,是不是 async/await 用错了? 我试过把 await 放在 fetch 前面,也确认函数是 async 的,但还是不行。 async function fetchData() { fetch('/api/user').then(res => res.json()); fetch('/api/profile').then(res => res.json()); } Promise 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 Prog.梓桑 Lv1 你在代码里虽然用了 async 函数,但没有真正利用 await 的特性。要让两个请求按顺序执行,每个 fetch 都需要单独用 await 来等待完成。 这样改写试试: async function fetchData() { let userResponse = await fetch('/api/user'); let userData = await userResponse.json(); let profileResponse = await fetch('/api/profile'); let profileData = await profileResponse.json(); } 注意几个点:首先每个 fetch 后面都要跟 await,这样才能保证顺序执行。另外别忘了处理可能的异常,实际开发中最好加上 try...catch 结构。 这其实是个常见的误区,很多新手以为只要在函数前加 async 就万事大吉了。其实 async 只是允许你用 await,真要控制异步流程还得靠 await 自己。 我以前也犯过这种错,调试了半天才发现问题出在这儿,挺烦人的。不过现在都养成习惯了,写异步代码第一反应就是检查 await 放对地方了没。 回复 点赞 2026-03-27 06:06 轩辕诗雅 Lv1 你 fetch 请求后面忘了加 await,省事的话改成这样: async function fetchData() { await fetch('api/user').then(res => res.json()); await fetch('api/profile').then(res => res.json()); } 回复 点赞 2026-03-22 11:18 加载更多 相关推荐 2 回答 109 浏览 async函数里的await为什么没按顺序执行两个API请求? 我在写一个表单提交功能,需要先检查用户名是否可用再提交注册信息。用async/await写完后发现第二个请求总是先执行,导致报错。代码逻辑明明是按顺序写的啊... async function reg... ლ俊轶 前端 2026-01-28 10:09:28 2 回答 65 浏览 @babel/preset-env 没有按 browserslist 转译 async/await 是怎么回事? 我项目里用了 async/await,browserslist 配置了要兼容到 IE11,但打包后代码里还是原样的 async/await,没被转成 generator。是不是 preset-env ... 轩辕梓涵 工具 2026-03-23 23:41:24 2 回答 47 浏览 async/await 里怎么正确处理多个异步请求的加载状态? 我用 async/await 写了个函数同时发两个请求,想在都完成后再更新页面。但 loading 状态老是控制不好,有时候一个完成了就提前关了 loading,结果第二个还没回来。试过用 Promi... 成立(打工版) 前端 2026-03-08 23:13:19 1 回答 54 浏览 try…catch 为什么捕获不到异步错误? 我在用 async/await 写接口请求,想用 try...catch 捕获错误,但发现有时候根本进不去 catch 块,控制台直接报红了。 比如下面这段代码,明明 fetch 可能失败,但错误没被... Des.志燕 前端 2026-03-26 23:21:20 1 回答 65 浏览 为什么 try…catch 捕获不到异步函数里的错误? 我在用 async/await 写接口请求,但发现 try...catch 好像没生效,错误直接抛到控制台了,根本没进 catch 块。是不是写法有问题? 我试过把 await 放在 try 里面,也... a'ゞ沁仪 前端 2026-03-21 09:28:20 2 回答 98 浏览 为什么Vue项目用Babel编译后出现regeneratorRuntime未定义错误? 在Vue组件里用了async/await写法,按照教程配置了bable.config.js,但打包时报错‘regeneratorRuntime is not defined’。已经装了@babel/r... 萌新.海利 工具 2026-01-27 13:23:21 2 回答 46 浏览 Async Validator 异步校验不生效是怎么回事? 我在用 Ant Design 的 Form 表单做用户名重复校验,明明写了 async validator,但输入后完全没触发请求,控制台也没报错,是哪里写错了吗? 我试过把 validator 函数... W″娇娇 交互 2026-03-24 18:11:20 1 回答 52 浏览 AsyncStorage取不到刚存的数据是怎么回事? 我在React Native里用AsyncStorage存了个token,存完马上去取却拿不到,一直是null,这正常吗? 我试过加await,也确认key没写错,但就是读不出来。是不是存完不能立刻读... Air-艳艳 框架 2026-03-23 14:19:15 2 回答 56 浏览 Babel Polyfill 到底该怎么用才不会报错? 我在 React 项目里用了 async/await,但打包后在低版本浏览器里直接白屏,控制台报 Promise 未定义。我查了说是需要加 Polyfill,但按文档引入 @babel/polyfil... 倩云 工具 2026-03-20 15:22:20 1 回答 64 浏览 Angular里用async管道订阅Observable为啥不自动取消? 我在组件模板里用了async管道订阅一个Observable,但切换路由后发现数据还在请求,是不是没自动取消订阅啊? 我试过在组件里手动unsubscribe,但听说async管道会自动处理,可实际好... 萌新.雯雯 框架 2026-03-16 08:52:20
这样改写试试:
注意几个点:首先每个 fetch 后面都要跟 await,这样才能保证顺序执行。另外别忘了处理可能的异常,实际开发中最好加上 try...catch 结构。
这其实是个常见的误区,很多新手以为只要在函数前加 async 就万事大吉了。其实 async 只是允许你用 await,真要控制异步流程还得靠 await 自己。
我以前也犯过这种错,调试了半天才发现问题出在这儿,挺烦人的。不过现在都养成习惯了,写异步代码第一反应就是检查 await 放对地方了没。