likes
comments
collection
share

异步编程界的“绝代双骄”-Async & Await

作者站长头像
站长
· 阅读数 21

前言

在编程的世界里,异步编程就像是一场精彩的魔术表演,让我们的程序在执行耗时操作时也能流畅运行,而不是像木头人一样卡在那里动弹不得。今天,我们就要聊聊两位异步编程界的明星——async与await,看看它们是如何让我们的代码变得更加优雅和高效的!

一、异步编程之痛

在没有async/await之前,异步编程就像是在黑暗森林里探险,充满了未知和挑战。让我们先来看一段经典的回调地狱(Callback Hell)代码:

setTimeout(function() {
  console.log('1秒后');
  setTimeout(function() {
    console.log('2秒后');
    setTimeout(function() {
      console.log('3秒后');
      setTimeout(function() {
        console.log('4秒后');
      }, 1000);
    }, 1000);
  }, 1000);
}, 1000);

这段代码虽然实现了功能,但是可读性极差,每一层嵌套都让人头疼不已。好在,JavaScript 社区终于迎来了救星——async/await。

二、Async & Await 的魅力

Async 和 Await 就像是异步编程界的“绝代双骄”,它们让异步代码看起来就像是同步代码一样简单易懂。

Async 关键字

Async 关键字用来声明一个函数是异步的,这意味着函数内部可以使用 await 关键字来等待 Promise 完成。

async function getSomeData() {
  const response = await fetch('https://api.example.com/data');
  const data = await response.json();
  return data;
}
Await 关键字

Await 关键字用来等待一个 Promise 结果。它只能出现在 async 函数内部。

async function printData() {
  const data = await getSomeData();
  console.log(data);
}

三、Async & Await 的使用

Async 和 Await 让异步编程变得更加简洁,下面我们通过一个具体的例子来看看它们是如何工作的。

例1:加载数据

假设我们有一个 API 可以获取用户的详细信息,我们可以这样写:

async function getUserDetails(userId) {
  try {
    const response = await fetch(`https://api.example.com/users/${userId}`);
    if (!response.ok) throw new Error('Network response was not ok');
    const user = await response.json();
    console.log(user.name);
  } catch (error) {
    console.error('Error fetching user details:', error);
  }
}

getUserDetails(1);  // 假设用户ID为1

在这段代码中,我们首先使用 fetch 来获取用户数据,然后通过 await 等待响应。如果一切顺利,我们将打印出用户的名字;如果出现错误,我们会捕获异常并打印出来。

例2:加载多条数据

如果我们需要加载多个用户的详细信息呢?我们可以轻松地扩展上面的例子:

async function loadUsers(userIds) {
  try {
    const users = await Promise.all(userIds.map(async id => {
      const response = await fetch(`https://api.example.com/users/${id}`);
      if (!response.ok) throw new Error('Network response was not ok');
      return response.json();
    }));
    users.forEach(user => console.log(user.name));
  } catch (error) {
    console.error('Error loading users:', error);
  }
}

loadUsers([1, 2, 3]);  // 加载三个用户的详情

这里我们使用 Promise.all 来并发加载所有用户的详细信息,然后遍历结果并打印每个用户的名字。

四、总结

Async 和 Await 让我们的异步编程变得更加优雅和高效。它们不仅简化了我们的代码,还提高了可读性和可维护性。Async 和 Await 的出现就像是一股清新的风,吹散了异步编程中的阴霾。它们让我们能够更专注于业务逻辑本身,而不是纠结于复杂的回调函数和 Promise 链接。在编写异步代码时,记得给你的函数加上 async,并在适当的地方使用 await,你会发现你的代码变得更易于理解和维护了。如果你还没有开始使用它们,现在就行动起来吧!让我们的代码更加“异步”而美丽!希望这篇文章能帮助你更好地理解 async 和 await 的用法,让我们的编程之旅更加愉快!

转载自:https://juejin.cn/post/7398050410805821466
评论
请登录