Async和Await

概述

在JavaScript中,asyncawait 是用于处理异步操作的关键字,它们提供了一种更简洁和易于理解的方式来编写异步代码。与传统的回调函数和Promise相比,asyncawait 使异步代码看起来更像是同步代码,从而提高了代码的可读性和维护性。

async 关键字

async 关键字用于声明一个异步函数。这个函数会隐式地返回一个Promise对象。即使你没有在函数内部显式地返回一个Promise,JavaScript引擎也会自动将函数的返回值包装成一个Promise。

1
2
3
async function myAsyncFunction() {
// 这里可以包含同步和异步操作
}

await 关键字

await 关键字只能在async函数内部使用。它用于等待一个Promise对象解决(resolve)或拒绝(reject)。await会暂停async函数的执行,直到Promise被解决,然后它会返回Promise解决的值。如果Promise被拒绝,await会抛出一个异常,这个异常可以用try...catch语句来捕获。

1
2
3
4
5
6
7
8
9
10
11
12
async function myAsyncFunction()
{
try
{
let result = await someAsyncOperation(); // 等待Promise解决
console.log(result); // 处理解决后的值
}
catch (error)
{
console.error('Error:', error); // 处理错误
}
}

使用示例

以下是一个简单的示例,演示如何使用asyncawait来处理异步操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function delay (duration, n)
{
return new Promise((resolve) =>
{
setTimeout(() =>
{
resolve(n)
}, duration)
})
}

async function log()
{
//1、在Promise实例前加await关键字,这样await的返回值就是Promise的resolve参数
//2、await所在的函数必须被async关键字修饰
//3、await所在的函数会按照同步的方式进行代码的执行
const n1 = await delay(2000, 1)
console.log(n1)
const n2 = await delay(1000, 2)
console.log(n2)
const n3 = await delay(1000, 3)
console.log(n3)
}

log()