但实际Promise立马resolve了,后面的同步代码要先于then里的回调函数执行,微观任务这块怎么弄的呢

来源:12-16 构建多异步+级联 then 【 第二种实现方式 常规实现】 -

qq_东映_0

2022-03-23

但实际Promise立马resolve了,后面的同步代码要先于then里的回调函数执行,微观任务这块怎么弄的呢

写回答

3回答

keviny79

2022-03-25

你提供的这种直接加setTimeOut的方案,存在一个问题,问题见截图!

      if (this.status === 'pending') {

        setTimeout(() => {

          this.status = 'success'

          this.resolve_executor_value = value


          this.resolve_then_callbacks.forEach((callback) => callback())

        }, 0)

//img.mukewang.com/szimg/623d5d6408bd40b712230750.jpg

0
0

qq_东映_0

提问者

2022-03-24

//img.mukewang.com/szimg/623c234d083a2d7307700256.jpgAAAAAA

0
2
qq_东映_0
回复
keviny79
确实是
2022-03-25
共2条回复

keviny79

2022-03-24

//img.mukewang.com/szimg/623bf75d092d2ad011150767.jpg//img.mukewang.com/szimg/623bf65a095b551b10530736.jpg

这个问题简单,只需要控制好同步即可!参加截图,不难理解,我没有写注释,留点思考的空间给你!

0
3
keviny79
回复
qq_东映_0
1. 这个isPromise2 是必须要加的,而且调用是并不需要人为添加返回Promise, 针对的是 当你在then函数中返回Promise时直接 resolve没有加setTimeOut或其他异步时,会直接返回Promise对象给下一个then的问题, 而上面截图中if 块代码就是解决这个问题的, 你在调用时没需要时不用添加 return new Promise. 2. 你思考对了加 setTimeout,那么加这个setTimeout真实解决了什么问题呢?是解决测试类中Promise 不加setTimeout 直接resolve 后 resolve先于 then执行的问题吗? 可以思考下!
2022-03-24
共3条回复

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程