promise的运行结果顺序

请教一下为什么这段代码的运行结果是这样的
1首先被输出
两秒后,2,3,4同时被输出
然后又过了两秒11被输出
不太理解,在火狐和chrome的调试上都是这个样子的
clipboard.png

阅读 2.6k
3 个回答

promise有三种状态:pending(进行中)、fulfilled(已成功,也就是resolved)和rejected(已失败)。当你生成一个Promise实例的时候,传入的方法会先执行,也就是输出1。两秒后,调用了resovle方法,改变了promise的状态,执行后面的第一个then方法中的回调。then方法,在没有返回promise实例的情况下,默认返回resolved状态的promise,因此,会紧跟着执行后续then方法中的代码,也就是处处2,3,4。在最后的一个then方法中因为是定时器,会在11秒之后执行,所以会在11秒后,输出11。
而前面几个then方法中的定时器,其实是没用的。因为,每个promise在resolve的时候,并没有传入传递的参数,就和setTimeout(undefined, 0)一样,并不会执行什么。

then 中的 callback 是接收 Promise 的 resolve 值作为参数,而不是 resolve 和 reject 函数。
所以,除第一个 function(resolve, reject) 之外,后面的所有 resolvereject 都是 undefined

Promise实例中的console.log()还是同步,resolve()的调用才是真正的开始了异步。你可以在Promise的实例前后分别加一个console.log()查看一下,有兴趣可以看一下源码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题