1个回答

test
2024-07-11
Promise.resolve()与new Promise(r => r(v))可以参考这篇文章
// v是一个实例化的promise,且状态为fulfilled
let v = new Promise(resolve => {
console.log("begin");
resolve("then");
});
// 在promise里面resolve一个状态为fulfilled的promise
// 模式一 new Promise里的resolve()
// begin->1->2->3->then->4 可以发现then推迟了两个时序
// 推迟原因:浏览器会创建一个 PromiseResolveThenableJob 去处理这个 Promise 实例,这是一个微任务。
// 等到下次循环到来这个微任务会执行,也就是PromiseResolveThenableJob 执行中的时候,因为这个Promise 实例是fulfilled状态,所以又会注册一个它的.then()回调
// 又等一次循环到这个Promise 实例它的.then()回调执行后,才会注册下面的这个.then(),于是就被推迟了两个时序
new Promise(resolve => {
resolve(v);
}).then((v)=>{
console.log(v)
});
// 模式二 Promise.resolve(v)直接创建
// begin->1->then->2->3->4 可以发现then的执行时间正常了,第一个执行的微任务就是下面这个.then
// 原因:Promise.resolve()API如果参数是promise会直接返回这个promise实例,不会做任何处理
/* Promise.resolve(v).then((v)=>{
console.log(v)
}); */
new Promise(resolve => {
console.log(1);
resolve();
})
.then(() => {
console.log(2);
})
.then(() => {
console.log(3);
})
.then(() => {
console.log(4);
});
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容