async/await是用同步风格编写异步逻辑的语法糖,不改变异步本质;async函数自动返回Promise,await仅在async函数内暂停执行并等待Promise落定,需用try/catch处理错误,多请求应使用Promise.all([p1,p2])并行而非串行。

async/await 不是让异步变同步,而是用同步风格写异步逻辑——它不阻塞线程,也不改变异步本质,只是让代码更易读、更易维护。
加了 async 的函数,无论内部写什么,返回值都会被自动包装成 Promise。如果 return 一个普通值,比如 return 42,实际等价于 return Promise.resolve(42);如果抛错,等价于 return Promise.reject(err)。
await 在普通函数或顶层作用域(ES2022 之前)中直接写async function foo() {} 和 const foo = async () => {} 行为一致await 只能在 async 函数内使用,它会让 JS 引擎“暂停”当前函数的执行(注意:不是卡住线程),等右侧的 Promise 成功 resolve 后,再把结果作为表达式的值继续往下走。如果 Promise 被 reject,就相当于 throw 了一个错误,可以用 try/catch 捕获。
const data = await fetch('/api').then(r => r.json()) ✅ 可以,但没必要——await 本身已处理 thenconst data = await fetch('/api').json() ❌ 错误,fetch() 返回 Promise,.json() 是方法调用,不是 Promiseconst res = await fetch('/api'); const data = await res.json();
await 后的 Promise 如果 reject,会直接冒泡成异常。所以推荐用 try/catch 包裹,语义清晰,也方便捕获中间多个 await 的错误。
立即学习“Java免费学习笔记(深入)”;
getData().catch(handleError) —— 失去了 await 的链式可读性try { const a = await step1(); const b = await step2(); } catch (e) { handleError(e); }
Promise.all([await p1, await p2]) 是错的——会串行。应写成 await Promise.all([p1, p2])
await 不会让 API 请求变快,也不会让 setTimeout 立刻执行。它只是语法糖,底层仍是事件循环和微任务队列。你写的“看起来像同步”的代码,执行时依然受制于网络延迟、I/O 耗时等现实约束。
Promise.resolve(value),所以 await 123 是合法的,但没实际意义基本上就这些。async/await 是组织异步逻辑的利器,不是魔法开关。用对了,代码清爽;用错了,反而掩盖回调地狱的本质问题。
以上就是什么是async/await_javascript中异步代码如何同步化?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号