Promise 构造函数是同步执行还是异步执行,那么 then 方法呢 ?
Promise 构造函数中的代码是同步执行的,而.then
或者.catch
中注册的回调函数是异步执行的。
以下是一个简单的例子来说明这个过程:
console.log('before promise'); // 1
let promise = new Promise((resolve, reject) => {
console.log('inside promise'); // 2
resolve('resolved');
});
promise.then((value) => {
console.log(value); // 4
});
console.log('after promise'); // 3
在这个例子中,'before promise'
和'inside promise'
的打印是同步执行的,所以他们会先于其他代码执行。Promise 构造函数接收一个函数作为参数,这个函数会立即执行。
当 Promise 构造函数中的代码执行完毕,会立即返回一个 Promise 对象,此时 Promise 对象的状态可能已经变为了 fulfilled 或者 rejected,然后代码继续执行,打印出'after promise'
。
然后,当所有同步代码执行完毕,事件循环会查看任务队列中是否有待处理的任务。在这个例子中,Promise 的.then
回调函数就在任务队列中,因此会被取出并执行,打印出'resolved'
。
所以,输出的顺序是:'before promise'
-> 'inside promise'
-> 'after promise'
-> 'resolved'
。