专栏首页itclanCoderJs篇-面试题2-Promise 执行顺序问题

Js篇-面试题2-Promise 执行顺序问题

Promise 执行问题

写出下面一段程序的输出的结果

new Promise(resolve => {
    console.log(1);
    setTimeout(() => console.log(2),0)
    Promise.resolve().then(() => console.log(3))
    resolve();
}).then(() => console.log(4))
console.log(5)

答案: 1 5 3 4 2

解析:事件循环,任务队列的执行顺序,new Promise是会立即调用,接收了一个resolve参数,执行调用输出console.log(1)语句,遇到setTimeout,它是一个异步宏任务,会推送到任务队列中,进入挂起状态

promise.resove也是一个异步微任务,仍然会推送到任务队列中,进入挂起状态,当主线程console.log(5)执行完后,在从异步任务队列中进行执行,在同一栈中,微任务要优先于宏任务的执行,所以先执行 3,然后 4,最后是 2

最终执行的顺序结果是:1,5,3,4,2

本文分享自微信公众号 - itclanCoder(itclanCoder),作者:随笔川迹

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Js篇-面试题9-请说一下Js中的事件循环机制

    虽然 JS 是单线程的,但是浏览器的内核却是多线程的,在浏览器的内核中不同的异步操作由不同的浏览器内核模块调度执行,异步任务操作会将相关回调添加到任务队列中

    itclanCoder
  • 使用相交观察器和SQIP进行渐进式图像加载

    在前面一文使用交叉点观察器延迟加载图像以提高性能中,已经知晓了使用该方式可以提高页面的访问速度,那在此基础上,我们还可以做得更好?,答案显而易见,如果你爬梯子访...

    itclanCoder
  • js中的同步与异步

    如果仅仅停留在文字上的理解,个人觉得有口无心,每当屡屡面试时,这都是一个常问的话题,牵扯到的是事件的执行顺序,任务队列,在js当中对于异步处理任务,是一个非常重...

    itclanCoder
  • Promise对象、传参以及错误处理

    在大部分情况下我们的程序都是在进行异步操作,需要嵌套多次callback,使得程序变得复杂!ES6中提供了Promise对象,将非阻塞I/O变为阻塞I/O,把异...

    十月梦想
  • 十四、深入核心,详解事件循环机制

    JavaScript的学习零散而庞杂,很多时候我们学到了一些东西,但是却没办法感受到进步!甚至过了不久,就把学到的东西给忘了。为了解决自己的这个困扰,在学习的过...

    用户6901603
  • 全方位理解JavaScript的Event Loop

    下面我们一个一个的来了解 Event Loop 相关的知识点,最后再一步一步分析出本段代码最后的输出顺序。

    laixiangran
  • JavaScript之Event Loop

    先看段代码: console.log(1); setTimeout(function () { console.log(2); new Pr...

    laixiangran
  • NodeJs中的fs模块

    wePanda
  • 浅谈自执行函数(立即调用的函数表达式)

    既然函数名加上括号fun1()就是执行函数。 思考:直接取赋值符号右侧的内容直接加个括号,是否也能执行? 试验如下,直接加上小括弧:

    celineWong7
  • JavaScript 事件循环机制

    javascript是一门单线程的非阻塞的脚本语言。单线程意味着javascript在执行代码的任何时候,都只有一个主线程来处理所有的任务。

    嘉明

扫码关注云+社区

领取腾讯云代金券