关于Promise中执行顺序的诡异现象
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
蒋整个流程当做一个tick,Promise 的 then 应当会放到当前 tick 的最后。可以看看这篇文章:https://zhuanlan.zhihu.com/p/...
事件循环
Promise.then
是异步执行的,但是创建Promise
实例是同步执行的,可以去了解下,
MacroTask(Task)
和MicroTask(Job)
的概念不是执行res,而是抛出res中的值在后续的then()中执行,你这边抛出的是1,所以在promise中代码依次运行完后 会将1抛出,then接受一个函数,这个函数中的参数data就是promise中抛出的值(你这边是1),所以1是被最后打出
没什么好诡异的,这只是Promise的机制而已。
好好看下这个就可以理解了:http://es6.ruanyifeng.com/#do...