如图:
一、相关概念
Promise.resolve()
表示创建一个已经 resolved(解决)的 Promise 对象。它是 Promise 构造函数的静态方法之一。
当调用 Promise.resolve(value)
时,会返回一个状态为已解决(resolved)的 Promise 对象,并且该 Promise 对象的结果值(fulfillment value)为传入的 value 值。如果传入的 value 是一个 Promise 对象,则返回的 Promise 对象与传入的 Promise 对象具有相同的状态和结果值。
这个方法常用于将非 Promise 值转换为 Promise 对象,以便能够使用 Promise 的链式调用特性,或者在需要将某个值包装成 Promise 对象并立即解决时使用。
二、输出结果
这段代码的打印顺序为0, 1, 2, 3, 4, 5, 6
三、原因
把.then后的异步任务添加的微任务队列中,所以第一步如图:
按顺序执行先打印0,return Promise.resolve(4)后的第一部分内容由于是微任务向后调整,如图:
然后第二部分打印1,.then后的整体往后调整,又到了第一部分后的后面,如图:
第一部分resolve(4)的值传给x,第一部分移到第二部分后面,可以看出接下来会打印2,如图:
打印2后,第二部分.then后的整体移动到第一部分后面,如图:
接下来第一部分把return 4的值传递给x,.then后的代码移动到第二部分的后面,如图:
这个时候会发现接下来要打印的就是第二部分的3,然后第二部分.then后的代码整体移动到第一部分后面,如图:
到这里就会形成一个清晰的认识,接下来打印的就是4,然后是5,最后是6。
总结:
像这个事件循环执行顺序题最主要的是理解return Promise.resolve(4)这一部分,可以把Promise.resolve(4)看作是
new Promise((resolve) => {
resolve(4)
}).then(x => {
return x
})
后面就根据微任务的执行方式去进行推导。