await表达式
await表达式用于等待一个Promise对象的解析,并将解析后的结果返回。它可以放在任何返回Promise对象的函数调用前面,包括异步函数调用、Promise链的调用等。在等待期间,async函数会暂停执行,直到Promise对象的状态变为已解析。
以下是await表达式的基本语法:
代码语言:javascript复制let result = await promise;
在上述语法中,promise
是一个Promise对象,result
是解析后的结果。在等待期间,async函数会暂停执行,直到promise对象的状态变为已解析。然后,解析后的结果会被赋值给result
变量。
需要注意的是,await只能在async函数内部使用。如果在非async函数中使用await关键字,会导致语法错误。
示例
下面是一个示例,演示了如何使用await表达式等待Promise对象的解析:
代码语言:javascript复制function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function fetchData() {
console.log('Fetching data...');
await delay(2000); // 模拟异步操作
console.log('Data fetched!');
return 'Data'; // 返回数据
}
async function processData() {
try {
const data = await fetchData(); // 等待fetchData函数完成
console.log('Processing data:', data);
// 其他数据处理逻辑
} catch (error) {
console.error('Error occurred:', error);
}
}
processData();
在上述示例中,我们定义了两个async函数:fetchData()
和processData()
。在fetchData()
函数中,我们模拟了一个异步操作,通过await
关键字等待2秒钟后,返回一个数据。在processData()
函数中,我们调用了fetchData()
函数并使用await
关键字等待其完成。在try...catch
语句块中,我们对可能发生的错误进行捕获和处理。
当我们调用processData()
函数时,它会按照顺序执行异步操作。在控制台输出中,我们可以看到执行过程中的日志信息,包括"Fetching data..."、"Data fetched!"以及"Processing data: Data"。