📌  相关文章
📜  如何在 Javascript 中创建异步函数?(1)

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

如何在 JavaScript 中创建异步函数?

异步函数可以让 JavaScript 代码不被阻塞,提高代码的性能和响应速度,一定程度上解决了回调函数的回调地狱问题。本文将介绍如何在 JavaScript 中创建异步函数。

使用 Promise

Promise 是 JavaScript 中异步编程的一种解决方案,可以让异步操作变得更加简单且具有可读性。

首先我们需要使用 Promise 的构造函数创建一个 Promise 对象,该对象包含一个实现异步操作的函数,通常称为 executor 函数。

function asyncFunction() {
  return new Promise(function(resolve, reject) {
    // 异步操作
  });
}

executor 函数具有两个参数,分别为 resolvereject 函数。当异步操作成功完成时,我们要调用 resolve 函数并传入操作结果;当操作失败时,我们要调用 reject 函数并传入错误信息。

例如,我们可以创建一个简单的异步函数,使用 setTimeout 模拟异步操作:

function asyncFunction(timeout) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve('success');
    }, timeout);
  });
}

在创建好异步函数之后,我们可以使用 then 方法获取异步操作的结果:

asyncFunction(1000).then(function(result) {
  console.log(result);
}).catch(function(error) {
  console.log(error);
});

then 方法接收两个参数,分别为成功回调函数和失败回调函数,在异步操作执行完成之后,如果操作成功,则调用成功回调函数并传入操作结果;如果操作失败,则调用失败回调函数并传入错误信息。我们也可以使用 catch 方法来捕获 Promise 中的错误信息。

使用 async/await

ES2017 中引入了 async/await 关键字,可以让异步编程更加简单,直观且具有可读性。

使用 async/await,我们可以在函数前加上 async 关键字来声明一个异步函数,该函数将返回一个 Promise 对象。

async function asyncFunction() {
  // 异步操作
}

在异步函数中,我们可以使用 await 关键字等待 Promise 对象的完成,并返回 Promise 执行的结果。

例如,我们可以使用 async/await 改写前面 Promise 的例子:

async function asyncFunction(timeout) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve('success');
    }, timeout);
  });
}

async function main() {
  try {
    const result = await asyncFunction(1000);
    console.log(result);
  } catch (error) {
    console.log(error);
  }
}

main();

在这个例子中,我们将异步操作放在 asyncFunction 函数中,并使用 await 等待执行结果。在 main 函数中,我们使用 try/catch 语句来处理 Promise 执行的结果。

小结

异步函数是 JavaScript 异步编程的一种解决方案,可以提高代码的性能和响应速度。使用 Promise 和 async/await 等方法,我们可以更加简单、直观地创建异步函数,并获取异步操作的结果。