在讨论JavaScript中的async
和await
以及浏览器中的宏任务和微任务时,有一些重要的概念需要理解。
async
函数是一个返回Promise对象的函数。在函数内部,使用await
关键字可以暂停函数的执行,等待Promise解决(fulfilled)后继续执行函数。await
表达式后面的Promise被解决,async
函数会继续执行。如果Promise被拒绝(rejected),则会抛出异常,可以通过try...catch
块来捕获。async function example() {
try {
const result = await somePromise;
console.log(result);
} catch (error) {
console.error(error);
}
}
宏任务和微任务:
queueMicrotask
添加的任务。执行顺序:
async
函数内部遇到await
时,它会暂停执行并让出主线程。await
期间,浏览器有机会执行其他宏任务(例如用户交互或定时器)。await
后的Promise被解决,async
函数将从暂停的地方继续执行。async
函数内部的await
表达式后面的代码会被视为微任务,会在当前任务结束后立即执行。async function example() {
console.log('Start');
await somePromise; // Pause execution until somePromise is resolved
console.log('After await');
}
console.log('Before calling example');
example();
console.log('After calling example');
在上述例子中,执行顺序是:
somePromise
解决)请注意,微任务总是在当前宏任务执行完毕后立即执行,而不会等待下一个宏任务。这确保了异步代码的执行顺序。