JavaScript 异步函数执行顺序详解:async/await 与 Promise
以下是代码的输出顺序和理由:
-
首先输出'script start',表示主线程开始执行。
-
调用async1()函数,输出'async1 start',表示async1()函数开始执行。
-
在async1()函数中,调用async2()函数,由于async2()函数是一个异步函数,需要等待其执行完毕,因此会先进入async2()函数中执行,输出'async2',然后返回到async1()函数中。
-
async2()函数执行完毕后,async1()函数继续执行,输出'async1 end'。
-
输出'promise1',表示Promise对象开始执行。
-
使用.then()方法,输出'promise2',表示Promise对象执行完毕。
-
输出'script end',表示主线程执行完毕。
因此,输出的顺序为:script start -> async1 start -> async2 -> async1 end -> promise1 -> promise2 -> script end。
代码示例:
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start')
async1();
new Promise(function (resolve) {
console.log('promise1');
resolve();
}).then(function () {
console.log('promise2');
});
console.log('script end')
解释:
- async/await 使得异步代码更易读,但本质上仍然是异步操作。
await会暂停当前函数的执行,直到等待的 Promise 对象 resolve。Promise提供了异步操作的管理机制,允许我们控制异步操作的执行顺序和结果。
总结:
理解 JavaScript 中 async/await 和 Promise 的工作机制,对于编写高效可靠的异步代码至关重要。本示例展示了如何使用 async/await 和 Promise 处理异步操作,以及它们的执行顺序。
原文地址: https://www.cveoy.top/t/topic/nkhK 著作权归作者所有。请勿转载和采集!