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异步编程的体验,使得代码更具可读性和可维护性。