promise then 的回调函数是在什么时候进入微任务队列的？
promise then 的回调函数是在遇到 resolve 语句的时候就被加入微任务队列，还是在遇到 then 语句的时候被加入到微任务队列？
在网上查了一些资料，发现有不同的说法：
1. 比如在《深入理解ES6》中文版 244 页里是这么说的：“调用 resolve( ) 后会触发一个异步操作， 传入 then( ) 和 catch( ) 方法的函数会被添加到任务队列中并异步执行”，所以 then 方法的回调应该是在调用 resolve 后就被加入到队列中的？
2. 对应的英文版原文是这么说的：“Calling resolve() triggers an asynchronous operation. Functions passed to then() and catch() are executed asynchronously, because these are also added to the job queue”
这个是知乎的回答：https://www.zhihu.com/question/62305365
这个是 StackOverflow 类似问题的回答：https://stackoverflow.com/questions/59846764/how-job-queue-works-with-promise ，答主在分析 event loop 的时候有这么一句：“The first then hooks up the first fulfillment handler, queuing a PromiseJobs job because the promise is already fulfilled”
1、2 都认为 then 的回调函数是在遇到 resolve 语句的时候就被加入微任务队列，3、4 都认为是在遇到 then 语句的时候被加入到微任务队列的。到底哪一种说法是正确的呢？
都没问题。
关键在于，`then` 是在 `resolve` 之前被调用的，还是 `resolve` 之后呢？
`then` 在 `resolve` 之前，`then` 不会加微任务，而是缓存起来，`resolve` 看到缓存里又 `then` 的回调，于是加微任务。
`resolve` 在 `then` 之前，`resolve` 的时候还没有任何回调要执行，自然不会加微任务。`then` 的时候发现已经 fullfilled ，于是直接加微任务。
也就是说，他们都有可能加，也都有可能不加，就看调用时的 promise 的状态了。
你的引用有些只说明了其一，但是说明里条件写得还是很清楚的，比如 4 里 "because the promise is already fulfilled"