面试题–promise和setTimeout的输出顺序

下面一段代码是在网上看到的一段关于promise和setTimeout的输出顺序的代码,下面做一下解答,有兴趣的百度自行了解js的执行机制(包括宏任务和微任务,这里就不在多说):

1、new promise事件只要建立,里面的代码会立即执行;
2、promise.then()和process.nextTick()的代码会在本轮"事件循环"结束时执行;
3、setTimeoutd(fn, 0)的代码会在下一轮"事件循环"开始时执行;
4、最后执行setTimeout(fn,1000)的代码。

setTimeout(function () {var np =new  Promise(function (resolve,reject) {console.log(1)resolve()})np.then(_=>{console.log(2)})console.log(3)
},1000)var pro = new Promise((resolve, reject) => {console.log(5)resolve()
}).then(_=>{setTimeout(function () {console.log(6)},0)return 7;
}).then(n=>{console.log(n)
})
console.log(4)
//执行结果 5  4  7  6  1  3  2
  • 首先执行代码遇到setTimeout(fn, 1000)将其放到消息队列中
  • 往下执行遇到new promise()直接执行里面的代码第一个输出5,遇到promise.then后将promise.then放到本次事件循环的结束
  • 再往下执行遇到console.log(4),所以第二个输出4,本次事件循环即将结束,去取promise.then()的代码
  • 第一个promise.then()里含有setTimeout(fn, 0)应当将其放在下一轮事件循环的开始
  • 紧接着第二个promise.then()执行n就是第一个promise.then()的返回值所以第三个输出7
  • 开始第二轮事件循环,首先读取setTimeout(fn, 0),第四个输出6
  • 将消息队列中的setTimeout(fn, 1000)取出来开始第二轮,还是一样的道理,紧接着输出1,3,2

面试题--promise和setTimeout的输出顺序相关推荐

  1. js事件循环——看输出顺序

    js事件循环: 由于js是单线程的,同一时间只能干一件事情,当期宿主环境为浏览器时,若一个任务耗时过长会导致页面阻塞.因此有了js事件循环机制,它将任务分成同步任务和异步任务,同步任务在主线程不断执行 ...

  2. DateGridView列的输出顺序反了

    问题: 敲机房里显示数据表的窗体,我用代码写的数据源绑定到datagridview控件显示的时候,顺序和数据库查询出来的表的顺序相反 过程: 后来一直在查DateGridView列的输出顺序反了怎么办 ...

  3. LUA表 pairs, ipairs输出顺序问题

    LUA表 pairs, ipairs输出顺序问题 t = {[1] = 222,[2] = 23,[3] = 2433,[42] = 135,[5] = 1287,[7] = 7,[102] = 10 ...

  4. Jackson 注解 -- 指定输出顺序

    默认情况下,字段的输出顺序和它们在类中的位置一致,我们也可以使用注解 @JsonPropertyOrder 自己指定顺序. package shangbo.jackson.demo12;import ...

  5. [转载] 【Python】set() 集合操作与运算 元素输出顺序

    参考链接: Python中set的copy 集合 | SET 集合(set)是Python中一种重要的数据类型,表示一组各不相同元素的无序集合,其主要应用于重复元素消除及关系测试等  集合在Pytho ...

  6. 剑指offer——面试题61:按之字形顺序打印二叉树

    剑指offer--面试题61:按之字形顺序打印二叉树 Solution1: 基于上一题的解法,缺点:效率低下! /* struct TreeNode {int val;struct TreeNode ...

  7. 面试题promise原理

    面试题Promise原理 在Promise的内部,有一个状态管理器的存在,有三种状态:pending.fulfilled.rejected. (1) promise 对象初始化状态为 pending. ...

  8. JsonObject存入顺序和输出顺序不一样问题-豆果

    2019独角兽企业重金招聘Python工程师标准>>> ##JsonObject的输入顺序和输出顺序不一样问题 ###问题原因在于JsonObject的默认实现的是用HashMap, ...

  9. 在顺序表中第五个位置插入一个元素9,实现顺序表插入的基本操作,输出顺序表中所有元素

    题目 在顺序表中第五个位置插入一个元素9,实现顺序表插入的基本操作,输出顺序表中所有元素 #include<iostream>using namespace std; #define OK ...

最新文章

  1. Nginx—核心配置location匹配规则说明
  2. python元组和列表都支持的方法是_python_列表和元组
  3. 我的MYSQL学习心得(二)
  4. linux系统6.5详解,linux6.5下 简单配置 MINI 系统实现详解(1)
  5. Observable与Observer
  6. json转对象的时候字段为空值的时候会被过滤
  7. dubbo源码解析之服务发布与注册
  8. Itext对pdf模板进行电子签名
  9. Java验收项目清单_软件验收管理工作内容
  10. 基于Node.js实现一个小小的爬虫
  11. 使用python实现往手机发短信(基于twilio)
  12. python动态网页爬取——四六级成绩批量爬取
  13. 主观意义上第一个基于DEFI的DAM平台DIPPER,年关崛起的黑马究竟是否能在新年创造区块链新纪元?而DIPPER的意义和价值又是什么?
  14. java导出excel下载后文件损坏无法修复
  15. mini2440+阿里云+Qt/android 打造智能音箱
  16. 考勤 日历 ajax,vue实现钉钉的考勤日历
  17. 云服务完整删除mysql
  18. sysconfig看不了怎么更新_sysconfig老版本下载-sysconfig稳定版(能看的版本)_5577安卓网...
  19. Unity自定义材质自发光烘焙设置工具
  20. Python3-Flask-微信公众号开发-3

热门文章

  1. SOA 和webservice 的区别
  2. 游戏思考24:游戏寻路算法思考和Unity场景相关代码开发原则及导入地图数据(10/09)
  3. ms08_067漏洞渗透步骤——MSF
  4. LeetCode | Climbing Stairs
  5. android解决ScrollView嵌套ListView不能下拉刷新
  6. 喜欢和什么样的人在一起?
  7. ByteBuffer.allocate()/ByteBuffer.allocateDirect()/JNI DETECTED ERROR IN APPLICATION: jarray was NULL
  8. scanf 输入函数
  9. 数据库系统原理——实验三
  10. 一位底层工程师参加谷歌开发者大会后的感想