Promise 构造函数是同步执行还是异步执行,那么 then 方法呢?
参考答案:
Promise 构造函数的执行
同步执行:
Promise的构造函数(即new Promise(executor))是同步执行的。- 当你创建一个新的
Promise实例时,传递给构造函数的executor函数会立即同步执行。 - 在
executor函数中调用resolve或reject也是同步的,直到executor函数执行完毕,Promise的状态才会改变。
示例:
javascript
console.log('Start');
const promise = new Promise((resolve, reject) => {
console.log('Inside promise executor');
resolve('Resolved value');
});
console.log('After promise creation');
promise.then(value => {
console.log('Inside then');
console.log(value);
});
console.log('End');输出:
Start
Inside promise executor
After promise creation
End
Inside then
Resolved valuethen 方法的执行
异步执行:
then方法的回调函数(onFulfilled和onRejected)是异步执行的。它们会在当前执行栈清空后被执行,即微任务队列(Microtask Queue)中。- 当
Promise的状态变为fulfilled或rejected时,then方法中注册的回调函数会被加入微任务队列,在当前脚本执行完后,事件循环会处理这些微任务。
示例:
javascript
console.log('Start');
const promise = new Promise((resolve, reject) => {
console.log('Inside promise executor');
resolve('Resolved value');
});
console.log('After promise creation');
promise.then(value => {
console.log('Inside then');
console.log(value);
});
console.log('End');输出:
Start
Inside promise executor
After promise creation
End
Inside then
Resolved value题目要点:
- Promise 构造函数:同步执行。在构造函数中传入的
executor函数立即执行。 then方法:异步执行。then方法的回调函数会在当前执行栈完成后,进入微任务队列执行。
这种设计确保了 Promise 的状态变更能够被正确地处理,并且 then 中的回调不会干扰到当前的同步执行流程。