请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

3回答

keviny79 2022-03-25 14:14:00

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

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

        setTimeout(() => {

          this.status = 'success'

          this.resolve_executor_value = value


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

        }, 0)

//img1.sycdn.imooc.com//szimg/623d5d6408bd40b712230750.jpg

0 回复 有任何疑惑可以回复我~
提问者 qq_东映_0 2022-03-24 15:52:51

https://img1.sycdn.imooc.com//szimg/623c234d083a2d7307700256.jpgAAAAAA

0 回复 有任何疑惑可以回复我~
  • 你提供的这种直接加setTimeOut的方案是个方案,但存在一个问题, 问题见上方截图!
    回复 有任何疑惑可以回复我~ 2022-03-25 14:14:12
  • 提问者 qq_东映_0 回复 keviny79 #2
    确实是
    回复 有任何疑惑可以回复我~ 2022-03-25 14:50:38
keviny79 2022-03-24 12:41:24

https://img1.sycdn.imooc.com//szimg/623bf75d092d2ad011150767.jpg//img1.sycdn.imooc.com//szimg/623bf65a095b551b10530736.jpg

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

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_东映_0 #1
    那么如何把resolveinThen()方法的返回变成一个promise呢,不可能人为在调用时,在then里就改成return new Promise()啥的
    回复 有任何疑惑可以回复我~ 2022-03-24 15:39:31
  • 提问者 qq_东映_0 #2
    resolve方法,改成setTimeout(,0)调用,是不是就可以了
    回复 有任何疑惑可以回复我~ 2022-03-24 15:49:59
  • keviny79 回复 提问者 qq_东映_0 #3
    1. 这个isPromise2 是必须要加的,而且调用是并不需要人为添加返回Promise,  针对的是 当你在then函数中返回Promise时直接 resolve没有加setTimeOut或其他异步时,会直接返回Promise对象给下一个then的问题, 而上面截图中if 块代码就是解决这个问题的, 你在调用时没需要时不用添加 return new Promise.
            2. 你思考对了加 setTimeout,那么加这个setTimeout真实解决了什么问题呢?是解决测试类中Promise 不加setTimeout 直接resolve 后 resolve先于 then执行的问题吗? 可以思考下!
    回复 有任何疑惑可以回复我~ 2022-03-24 19:43:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信