Sens

Results 2 comments of Sens

@Zippowxk 第三种方式可能会报错,你项目工程里面不一定有你test.esm.js的运行环境。

执行结果: 1 3 4 2。 代码从上往下执行, 先打印1,看见`setTimeout`丢到宏任务里面,等待执行, 因为`promise.then()`的参数是一个`console.log`(注意:并不是一个函数),且`then`是立即执行的。 函数立即执行,会先走参数的逻辑,然后在去调用函数。 所以先打印3,并且给`then`传了一个`undefined`(`console.log`的返回值是`undefined`),再把`then`丢到微任务里面 `while`循环是同步任务,等待1s后打印4, 此时同步任务走完了,开始执行异步任务,先将`then`取出来执行,发现then的第一个参数是一个`undefined`, `promise`内部会判断,如果`then`的第一个参数,也就是成功回调函数,不是一个参数的话,会自动给他包装成一个函数,并且将`resolve`的`value`值透传到下一个then里面。 然后去执行`setTimeout`,最后打印2。 如果说得不对的地方,欢迎大家讨论