登录
首页 >  文章 >  前端

javascript异步函数怎么用_await是如何处理Promise的?

时间:2025-12-21 13:00:41 402浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

积累知识,胜过积蓄金银!毕竟在文章开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《javascript异步函数怎么用_await是如何处理Promise的?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

async/await是基于Promise的语法糖,使异步代码更直观;async函数自动返回Promise,await在async内暂停执行并等待Promise完成,支持错误捕获且不阻塞线程。

javascript异步函数怎么用_await是如何处理Promise的?

async/await 是 JavaScript 中处理异步操作的语法糖,本质是基于 Promise 的封装,让异步代码写起来像同步代码一样直观。 它不会改变异步的本质,但大幅简化了 Promise 链式调用和错误处理的写法。

async 函数:自动返回 Promise 的函数

在函数声明前加 async,该函数就变成异步函数。它会自动把返回值包装成 Promise:

  • 如果函数返回普通值(如 return 42),实际返回的是 Promise.resolve(42)
  • 如果函数抛出异常(throw new Error()),等价于返回 Promise.reject(...)
  • 如果返回一个已存在的 Promise,就直接返回它(不额外包装)

await:暂停执行,等待 Promise settle

await 只能在 async 函数内部使用。 它会让 JS 引擎暂停当前 async 函数的执行,等待右侧表达式(必须是 Promise 或 thenable)完成(fulfilled 或 rejected),然后继续执行:

  • 如果 Promise 成功(fulfilled),await promise 的结果就是 promise.then(value => value) 中的 value
  • 如果 Promise 失败(rejected),await 会抛出错误,可以用 try...catch 捕获
  • 注意:await 不会阻塞整个线程,只是暂停当前 async 函数;其他任务(如事件、定时器)仍可正常运行

常见用法示例

对比传统 Promise 写法与 async/await:

// Promise 风格
fetch('/api/data')
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));

// async/await 风格
async function getData() {
  try {
    const res = await fetch('/api/data');
    const data = await res.json();
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

await 处理非 Promise 值

await 会自动对非 Promise 值调用 Promise.resolve()

  • await 123 等价于 await Promise.resolve(123),立即得到 123
  • await { then() { ... } }(thenable 对象)也会被当作 Promise 处理
  • await nullawait undefined 也合法,它们会被转为 Promise.resolve(null)

不复杂但容易忽略:await 后面不是 Promise 也能用,但真正有意义的等待,还是得靠真正的异步 Promise。

终于介绍完啦!小伙伴们,这篇关于《javascript异步函数怎么用_await是如何处理Promise的?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>