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'

发表评论

后才能评论