如何使用async-await?

什么是async/await?

async/await是一种JavaScript语言的异步编程方式。它使得在JavaScript中编写异步代码变得更加容易和直观。async/await是ES2017的一个新特性,在ES2015中引入了Promise,而async/await则是Promise的进一步简化和优化。

使用async/await的优点

使用async/await的优点包括:

  • 更好的可读性:async/await使得异步代码看起来更像同步代码,更容易理解。
  • 更容易处理错误:使用try/catch块可以更容易地处理异步代码中的错误。
  • 更容易编写复杂的异步代码:async/await可以更容易地编写复杂的异步代码,如多个异步操作的串联和并联。

使用async/await的基本语法

使用async/await的基本语法如下:

async function foo() {
  const result = await bar();
  console.log(result);
}

上述代码中,async函数返回一个Promise对象,其中await关键字用于等待异步操作的结果。当异步操作完成时,结果将被赋值给result变量

使用async/await的实例

下面是一个使用async/await的实例:

function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function foo() {
  console.log('foo start');
  await delay(1000);
  console.log('foo end');
}

foo();

上述代码中,foo函数中使用了await关键字等待1秒钟,然后输出了'foo end'。运行上述代码后,控制台输出的内容如下:

foo start
(等待1秒钟)
foo end

使用try/catch处理错误

使用async/await时,可以使用try/catch块来捕获异步操作中的错误。下面是一个使用try/catch处理错误的示例:

function getJSON(url) {
  return fetch(url)
    .then(response => {
      if (!response.ok) {
        throw new Error(response.status);
      }
      return response.json();
    });
}

async function foo() {
  try {
    const data = await getJSON('https://example.com/data.json');
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

foo();

上述代码中,foo函数中使用了try/catch块来处理getJSON函数的错误。如果getJSON函数返回的response状态码不是200,将会抛出一个错误并被catch块捕获。

串联多个异步操作

使用async/await,可以更容易地串联多个异步操作。下面是一个串联多个异步操作的示例:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

async function foo() {
  console.log('foo start');
  await delay(1000);
  console.log('foo middle');
  await delay(1000);
  console.log('foo end');
}

async function bar() {
  console.log('bar start');
  await foo();
  console.log('bar end');
}

bar();

上述代码中,bar函数中使用await关键字等待foo函数的执行结果。运行上述代码后,控制台输出的内容如下:

bar start
foo start
(等待1秒钟)
foo middle
(等待1秒钟)
foo end
bar end

并联多个异步操作

使用async/await,可以更容易地并联多个异步操作。下面是一个并联多个异步操作的示例:

const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

async function foo() {
  console.log('foo start');
  await delay(1000);
  console.log('foo end');
}

async function bar() {
  console.log('bar start');
  await Promise.all([foo(), delay(500)]);
  console.log('bar end');
}

bar();

上述代码中,bar函数中使用Promise.all函数并联等待foo函数和delay(500)函数的执行结果。运行上述代码后,控制台输出的内容如下:

bar start
foo start
(等待500毫秒)
foo end
bar end

总结

使用async/await可以使得在JavaScript中编写异步代码变得更加容易和直观。它可以更好地处理错误,更容易编写复杂的异步代码,并且可以更容易地串联和并联多个异步操作。

本文来源:词雅网

本文地址:https://www.ciyawang.com/bxaw1e.html

本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。

相关推荐