JavaScript的async
和await
关键字是在ES2017(也称为ES8)规范中引入的。具体发布时间是2017年6月。async
和await
为处理异步操作提供了一种更直观和简洁的方法,使得代码看起来像是同步执行,从而更容易阅读和维护。
以下是async
和await
的一些基本用法和例子:
基本用法
async 函数
一个函数被声明为async
,它就会返回一个Promise
。即使函数内部没有返回Promise
,JavaScript引擎会自动将返回值包装成一个Promise
。
async function myFunction() {return "Hello";
}myFunction().then(result => console.log(result)); // 输出: Hello
await 表达式
await
关键字只能在async
函数内部使用。它可以等待一个Promise
对象的解析,并返回其解析值。如果等待的Promise
被拒绝,await
会抛出该拒绝值。
async function myFunction() {let promise = new Promise((resolve, reject) => {setTimeout(() => resolve("Done!"), 1000);});let result = await promise; // 等待 promise 解析console.log(result); // 输出: Done!
}myFunction();
例子
以下是一个使用async
和await
来处理异步操作的例子:
function fetchData() {return new Promise((resolve, reject) => {setTimeout(() => {resolve("Data fetched");}, 2000);});
}async function fetchAndLogData() {console.log("Fetching data...");const data = await fetchData(); // 等待 fetchData 的解析console.log(data); // 输出: Data fetched
}fetchAndLogData();
在这个例子中,fetchData
函数模拟了一个异步操作(例如从服务器获取数据)。fetchAndLogData
函数使用await
来等待fetchData
的完成,然后输出结果。
异常处理
在async
函数中处理异步操作的异常,可以使用try...catch
语句:
async function myFunction() {try {let response = await fetch('https://api.example.com/data');let data = await response.json();console.log(data);} catch (error) {console.error('Error:', error);}
}myFunction();
这种方式使得异步代码的异常处理变得更加简洁和清晰。
async
和await
关键字极大地改善了JavaScript异步编程的体验,使得代码更具可读性和可维护性。