Promise 和 async/await执行顺序
时间: 2023-07-06 09:43:34 浏览: 115
`Promise` 和 `async/await` 的执行顺序都基于 JavaScript 事件循环机制。
在 `Promise` 中,异步操作会被添加到事件队列中,然后按照队列中的顺序执行。在执行过程中,如果遇到了异步操作,就会将其添加到事件队列中等待执行。当所有的同步任务执行完毕后,才会开始执行异步任务。
在 `async/await` 中,异步操作会被转化成一个 `Promise` 对象,并使用 `await` 等待异步操作的结果。在执行过程中,如果遇到了 `await`,JavaScript 引擎会暂停当前的异步操作,并等待 `Promise` 对象的状态变为 `resolved` 或 `rejected`,然后再继续执行后面的代码。
下面是一个简单的例子,演示了 `Promise` 和 `async/await` 的执行顺序:
```
// 使用 Promise
console.log('start');
new Promise((resolve, reject) => {
console.log('Promise1');
resolve();
})
.then(() => {
console.log('Promise2');
});
console.log('end');
// 使用 async/await
async function asyncFunc() {
console.log('start');
await new Promise((resolve, reject) => {
console.log('Promise1');
resolve();
});
console.log('Promise2');
console.log('end');
}
asyncFunc();
```
在 `Promise` 中,首先输出了一个 `start`,然后创建了一个 `Promise` 对象并添加到事件队列中,接着输出了一个 `end`,最后在异步任务执行完毕后输出了 `Promise2`。
在 `async/await` 中,首先输出了一个 `start`,然后创建了一个 `Promise` 对象并使用 `await` 等待其执行结果,接着输出了一个 `Promise2` 和一个 `end`。
因此,最终的输出结果分别是:
```
// Promise
start
Promise1
end
Promise2
// async/await
start
Promise1
Promise2
end
```
阅读全文