当你使用 async 关键字定义一个函数时,这个函数会返回一个 Promise。而当你在这个函数内部使用 await 关键字时,你实际上是在“等待”一个 Promise 的解决(fulfilled)或拒绝(rejected)。在等待期间,async 函数会暂停执行,并允许其他代码(包括其他微任务或宏任务)运行。
// 假设有一个返回Promise的函数
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Data fetched!');
}, 1000);
});
}
// 使用async/await的异步函数
async function processData() {
console.log('Starting data processing...');
// await会暂停当前函数,等待Promise解决
const data = await fetchData();
// 当Promise解决后,下面的代码作为微任务执行
console.log(data);
console.log('Data processing finished!');
}
// 调用异步函数
processData();
// 同步代码会立即执行
console.log('Processing started outside async function.');
// 输出顺序:
// "Starting data processing..."
// "Processing started outside async function."
// (等待1秒后)
// "Data fetched!"
// "Data processing finished!"