promise的运行结果顺序

发布于 2022-09-06 13:12:41 字数 242 浏览 15 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绝不服输 2022-09-13 13:12:41

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)一样,并不会执行什么。

两人的回忆 2022-09-13 13:12:41

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

归途 2022-09-13 13:12:41

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文