promise的运行结果顺序
请教一下为什么这段代码的运行结果是这样的
1首先被输出
两秒后,2,3,4同时被输出
然后又过了两秒11被输出
不太理解,在火狐和chrome的调试上都是这个样子的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
请教一下为什么这段代码的运行结果是这样的
1首先被输出
两秒后,2,3,4同时被输出
然后又过了两秒11被输出
不太理解,在火狐和chrome的调试上都是这个样子的
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(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)
之外,后面的所有resolve
、reject
都是undefined
。Promise实例中的console.log()还是同步,resolve()的调用才是真正的开始了异步。你可以在Promise的实例前后分别加一个console.log()查看一下,有兴趣可以看一下源码。