await
是一个用在异步函数(async function
)内部的关键字,它用于等待一个 Promise
完成并返回它的结果。当在异步函数中使用 await
时,函数的执行将会暂停,直到 Promise
完成,然后继续执行并返回结果。
以下是 await
的基本用法:
1. 基本用法
async function fetchData() {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
return data;
}
fetchData().then(data => {
console.log(data);
});
在上面的例子中,fetchData
函数是异步的,并在其中使用了 await
关键字两次。首先,它等待从网址获取数据,然后再等待将响应解析为JSON。
2. 使用try/catch处理错误
当使用 await
时,如果 Promise
被拒绝(即发生错误),则会抛出一个错误。因此,常见的做法是使用 try/catch
语句来处理这些错误:
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
return data;
} catch (error) {
console.error("An error occurred:", error);
throw error; // You can re-throw the error if you want to handle it elsewhere
}
}
3. await
和非Promise
虽然 await
主要用于 Promise
,但它也可以用于非 Promise
值。在这种情况下,它只是返回值本身:
async function returnNumber() {
let number = await 123;
return number;
}
returnNumber().then(value => {
console.log(value); // Outputs: 123
});
注意事项:
await
只能在async function
中使用。在常规函数或全局作用域中尝试使用它会导致语法错误。- 使用
await
会使函数暂停执行,但不会阻塞整个JavaScript事件循环。其他操作和事件仍然可以在背景中执行。 - 由于
await
暂停函数执行,因此需要考虑在哪里使用它,以避免不必要的性能问题。例如,如果有多个独立的异步操作,可能更好地并行执行它们,而不是按顺序等待每一个完成。
总之,await
提供了一种直观、易读的方法来处理异步操作,使得异步代码看起来更像传统的同步代码。