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'。
2528

被折叠的 条评论
为什么被折叠?



