• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

  • 共299篇

    前端 - Javascript

关闭

返回栏目

关闭

返回前端 - Javascript栏目

146 - async/await - async 函数 - async 函数的定义与返回值

作者:

贺及楼

成为作者

更新日期:2025-02-21 20:07:50

async/await - async 函数 - async 函数的定义与返回值

在现代 JavaScript 开发中,异步编程是非常重要的一部分。async/await 是 ES2017 引入的语法糖,它建立在 Promise 的基础之上,为异步代码提供了一种更简洁、更直观的编写方式。本文将详细介绍 async 函数的定义和返回值。

1. async 函数的定义

async 函数是一种特殊的函数,在函数声明或函数表达式前加上 async 关键字来定义。下面是几种不同的定义方式:

函数声明

  1. async function fetchData() {
  2. // 异步操作代码
  3. return 'Data fetched';
  4. }

函数表达式

  1. const fetchData = async function() {
  2. // 异步操作代码
  3. return 'Data fetched';
  4. };

箭头函数

  1. const fetchData = async () => {
  2. // 异步操作代码
  3. return 'Data fetched';
  4. };

类方法

  1. class DataFetcher {
  2. async fetchData() {
  3. // 异步操作代码
  4. return 'Data fetched';
  5. }
  6. }
  7. const fetcher = new DataFetcher();

2. async 函数的返回值

async 函数总是返回一个 Promise 对象。无论函数内部是否显式地返回一个 Promise,async 函数都会将返回值包装在一个 Promise 中。具体情况如下:

2.1 返回普通值

如果 async 函数返回一个普通值,这个值会被自动包装在一个已解决(resolved)的 Promise 中。

  1. async function returnNormalValue() {
  2. return 'Hello, async!';
  3. }
  4. returnNormalValue().then(result => {
  5. console.log(result); // 输出: Hello, async!
  6. });

2.2 返回 Promise

如果 async 函数返回一个 Promise,那么它就直接返回这个 Promise。

  1. function getData() {
  2. return new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve('Data from Promise');
  5. }, 1000);
  6. });
  7. }
  8. async function returnPromise() {
  9. return getData();
  10. }
  11. returnPromise().then(result => {
  12. console.log(result); // 输出: Data from Promise
  13. });

2.3 抛出错误

如果 async 函数内部抛出错误,这个错误会被包装在一个已拒绝(rejected)的 Promise 中。

  1. async function throwError() {
  2. throw new Error('Something went wrong');
  3. }
  4. throwError().catch(error => {
  5. console.error(error.message); // 输出: Something went wrong
  6. });

3. async 函数与 await 的结合使用

await 关键字只能在 async 函数内部使用,它可以暂停 async 函数的执行,直到 Promise 被解决(resolved)或拒绝(rejected)。

  1. function delay(ms) {
  2. return new Promise(resolve => setTimeout(resolve, ms));
  3. }
  4. async function example() {
  5. console.log('Start');
  6. await delay(2000);
  7. console.log('After 2 seconds');
  8. return 'Done';
  9. }
  10. example().then(result => {
  11. console.log(result); // 输出: Done
  12. });

4. 总结

情况 返回值 说明
返回普通值 已解决的 Promise 普通值会被自动包装在一个已解决的 Promise 中
返回 Promise 原 Promise 直接返回该 Promise
抛出错误 已拒绝的 Promise 错误会被包装在一个已拒绝的 Promise 中

async 函数通过返回 Promise 对象,为异步编程提供了一种更简洁、更直观的方式。结合 await 关键字,可以让异步代码看起来更像同步代码,提高代码的可读性和可维护性。在实际开发中,合理使用 async/await 可以让我们更轻松地处理异步操作。