» JavaScript快速入门 » 2. 高级篇 » 2.4 异步

异步

在JavaScript中,异步编程是一种允许代码无序执行的编程模式。这意味着在等待某些操作完成时,可以执行其他操作,而不需阻塞整个程序的执行。该模非常适合处理比较耗时的任务,比如从服务器获取数据,或者读取文件。

JavaScript中的异步编程通常通过回调(callbacks)Promise,以及最近流行的 async/await 等机制来实现。

Promises

Promise 对象表示异步操作的最终完成(或失败)及其结果值。

一个 Promise 可以处于以下其中一个状态:

  • pending:初始状态,既没有完成也没有拒绝。
  • fulfilled:意味着操作已成功完成。
  • rejected:意味着操作失败。
// 返回一个Promise的函数
function fetchData() {
  return new Promise((resolve, reject) => {
    // 模拟异步操作,比如从API获取数据
    setTimeout(() => {
      const data = Math.random();
      
      // 模拟成功
      if (data > 0.5) {
        resolve(data);
      } else {
        // 模拟失败
        reject("Error: Data is too low");
      }
    }, 500);
  });
}

// 使用Promise
fetchData()
  .then((result) => {
    console.log("Data fetched successfully:", result);
  })
  .catch((error) => {
    console.error("Failed to fetch data:", error);
  });

Async / Await

async function 声明将一个异步函数绑定到给定名称。await 关键字只允许在函数体内部使用。它们使得以更干净的方式编写基于 Promise 的异步行为成为可能,避免显式配置 Promise 链的不便。

async function fetchDataAsync() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const data = Math.random();
      if (data > 0.5) {
        resolve(data);
      } else {
        reject("Error: Data is too low");
      }
    }, 1000);
  });
}

// 使用 async/await
async function fetchDataUsingAsyncAwait() {
  try {
    const result = await fetchDataAsync();
    console.log("Data fetched successfully:", result);
  } catch (error) {
    console.error("Failed to fetch data:", error);
  }
}

// 调用异步函数
fetchDataUsingAsyncAwait();

如你所见,await 关键字等待 fetchDataAsync 返回的 Promise 并将其解决。这使得整体代码看起来像同步代码一样易理解。

代码挑战

创建一个名为 getUserInfo 的函数,获取用户信息并显示出来。信息包括用户的姓名和关注者数量。

注意:可查看 Promise.all() 用法介绍。

Loading...
> 此处输出代码运行结果
上页
下页