📜  等待示例 - Javascript (1)

📅  最后修改于: 2023-12-03 15:27:25.184000             🧑  作者: Mango

等待示例 - Javascript

在Javascript程序中,等待操作是非常常见的。等待操作通常与异步任务相关,比如从服务器获取数据、执行延时操作等等。本文将介绍在Javascript中实现等待操作的不同方式。

1. 回调函数

回调函数是最早也是最常用的实现异步等待的方式。它的基本思路是在异步任务完成后执行回调函数。以下是一个简单的例子:

function fetchData(callback) {
  setTimeout(() => {
    callback('Data fetched');
  }, 1000);
}

fetchData(function(data) {
  console.log(data);
});

上述代码中,fetchData()函数是一个异步任务,它通过setTimeout函数模拟了一个1秒钟的延时操作。在延时结束后,fetchData()函数会执行callback回调函数,从而返回数据。

2. Promise对象

Promise对象是ES6标准新增加的语法特性,它提供了一种更加优雅的方式来处理异步等待。它的基本思路是使用Promise对象来表示异步任务的状态,然后通过调用resolve()和reject()方法来设置Promise对象的状态。以下是一个使用Promise对象的例子:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Data fetched');
    }, 1000);
  });
}

fetchData()
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });

上述代码中,fetchData()函数返回一个Promise对象。在延时结束后,fetchData()函数调用resolve()方法来设置Promise对象的状态为“已完成”,从而返回数据。如果发生异常,则调用reject()方法来设置Promise对象的状态为“已拒绝”。

3. async/await语法

async/await语法是ES8标准新增加的语法特性,它提供了一种更加简洁的方式来处理异步等待。它的基本思路是使用async函数返回一个Promise对象,然后在内部使用await关键字来等待异步任务的结果。以下是一个使用async/await语法的例子:

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Data fetched');
    }, 1000);
  });
}

async function run() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

run();

上述代码中,run()函数是一个async函数,它返回一个Promise对象。内部使用await关键字来等待fetchData()函数的结果。如果成功返回数据,则打印输出。如果发生异常,则捕获并打印错误信息。

总结

回调函数、Promise对象和async/await语法是Javascript中常用的实现异步等待的方式。回调函数是最早也是最常用的方式,但存在回调地狱的问题。Promise对象解决了回调地狱问题,但仍然需要显式地调用then()和catch()方法。async/await语法进一步简化了代码,使得异步等待更加优雅。在实际开发中,可以根据需要选择合适的方式来实现异步等待。