关于Promise中执行顺序的诡异现象

发布于 2022-09-06 01:54:14 字数 320 浏览 15 评论 0

var po = new Promise(function(res,rej){
    res(1);
    console.log(12)
    console.log(123)
}).then(function(data) {
    console.log(data);
})

结果是:
12
123
1

对于这个执行结果,有以下疑问:

为什么先输出12和123,再执行了res(1)?Promise中的回调是天然异步的么?(即使new Promise的参数明明是一个同步的函数)

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

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

发布评论

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

评论(5

長街聽風 2022-09-13 01:54:15

蒋整个流程当做一个tick,Promise 的 then 应当会放到当前 tick 的最后。可以看看这篇文章:https://zhuanlan.zhihu.com/p/...

诗化ㄋ丶相逢 2022-09-13 01:54:15

Promise.then是异步执行的,但是创建Promise实例是同步执行的,

可以去了解下,MacroTask(Task)MicroTask(Job) 的概念

柠北森屋 2022-09-13 01:54:15

不是执行res,而是抛出res中的值在后续的then()中执行,你这边抛出的是1,所以在promise中代码依次运行完后 会将1抛出,then接受一个函数,这个函数中的参数data就是promise中抛出的值(你这边是1),所以1是被最后打出

Saygoodbye 2022-09-13 01:54:15

看图:

没什么好诡异的,这只是Promise的机制而已。

好好看下这个就可以理解了:http://es6.ruanyifeng.com/#do...

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