课程
下载APP
源自:2-4 对已完成的 Promise 执行 then

老师的这段代码讲的有问题吧??第二个定时器并没有按时再去执行

代码是这样的:

https://img.mukewang.com/5bbdc64c0001798304990347.jpg

按照老师的说法,流程是:

立即执行start、

一秒后输出 the promise fulfilled

两秒后(也就是两个定时器几乎同时排上队,第一个定时器耗时了1秒,同时的,距离第二个定时器触发还剩两秒)

输出hello world

其中,立即执行start我没有问题

问题是:

一开始我也是这个思路,我也觉得第一个定时器里,console会率先执行,输出the promise fulfilled。同时触发resolve

因为与resolve对接的then在第二个定时器中,需要再等两秒执行。

但是通过我的实验发现事情并不是这样的,

the promise fulfilled和hello world几乎是start一秒后同时打印的。

也就是说,第一个定时器触发的时候,promise.then里边的代码也触发了,没有受到第二个定时器的制约。

为了更好的观察,我故意修改两个定时器的时间差如下:

https://img4.mukewang.com/5bbdc75b0001b84e05430348.jpg

和上边一样的,这次start打印完大约三秒后,the promise fulfilled 和hello world同时打印

而不是hello world再等15000-3000秒后执行。。。


求大神讲解原理。

难道promise的then触发是,只要resolve调用了就会立即触发?

还是说什么别的原因?

提问者:xing_org1 2018-10-10 17:34

4个回答

  • 枫叶咚咚咚
    2018-10-11 09:53
    已采纳

    你的代码写错了,第二个计时器的时间(15000秒)没放对位置。https://img3.mukewang.com/5bbeacf200012a0709020676.jpg

  • 枫叶咚咚咚
    2018-10-11 10:02

    8客气,代码手误有时候真的很难自我发现……

  • xing_org1
    2018-10-11 10:04

    老师的代码没问题,是我抄的有问题!!!

  • 憨豆匠
    2019-11-25 23:53

    傻蛋~