为什么最近更新那么频繁,还不是因为笔试的时候瞎了?

先说异步事件执行顺序的规则:

1. 定时器异步队列和promise队列不是同一队列,promise优先级高于setTimeout;

2. 创建promise对象里面的代码属于同步代码,其异步性体现在then和catch处;

3. 遇到await,先执行完await所在行的事件(阻塞到执行完成),然后让出当前线程,继续走同步事件,await后面的语句等同于Promise.resolve(),进入promise的异步队列排队。

好了,理解这些就能做题了

async function async1() {
console.log("async1 start"); //2 同步事件
await async2(); //3 执行完后继续走同步事件
console.log("async1 end"); //6 await之后的代码 首选进入promise异步队列
}
async function async2() {
console.log( 'async2'); //
}
console.log("script start"); // 1 同步事件!
setTimeout(function () {
console.log("settimeout"); //8 最后,定时器的异步走最后!!!
},0);
async1(); //2 走异步函数内部的同步事件
new Promise(function (resolve) {
console.log("promise1"); //4 同步事件!
resolve();
}).then(function () {
console.log("promise2"); //7 最后进入promise异步队列
});
console.log('script end'); //5 同步事件!

加了备注了,但还是上结果吧

注意:await只能存在与 async 定义的函数内部, 遇到await 之后,代码就暂停执行了,必须等await代码执行完成后,才能进入下一步,下一步仍是先走同步代码。

懂了么?如果对 async 还迷糊,那就做以下测试!

上代码认识一下async

async function timeout() {
console.log('hello world'); //类似于创建promise对象时的同步代码
return '我属于promise对象' //这才是promise对象返回的resolve对象
}
timeout().then((result)=>{
console.log(result)
})
console.log('虽然在后面,但是我先执行'); //同步事件

输出结果:

所以:async所定义的异步函数,其返回值是promise对象

async function timeout(flag) {
if (flag) {
return 'hello world'
} else {
return 'my god, failure'
}
}
console.log(timeout(true)) // 调用Promise.resolve() 返回promise 对象。
console.log(timeout(false)); // 调用Promise.reject() 返回promise 对象。

JS异步事件顺序:setTimeout,async,promise的更多相关文章

  1. 前端知识总结--js异步事件顺序

    js中异步事件中容易混淆的 Promise 和 setTimeout 的执行顺序是怎样的? setTimeout(() => console.log(1), 0); new Promise(fu ...

  2. js 异步执行顺序

    参考文章: js 异步执行顺序   1.js的执行顺序,先同步后异步 2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列 3.调用Promise 中的res ...

  3. JS异步执行之setTimeout 0的妙用

    最近在工作中遇到一些问题,大致是关于js执行问题的.由于没搞清执行顺序,导致出现了一些奇怪的bug. 所以这里整理一些有关异步执行的知识(冰山一角角)... 大家都知道js是单线程的,执行起来是顺序的 ...

  4. node js 异步运行流程控制模块Async介绍

    1.Async介绍 sync是一个流程控制工具包.提供了直接而强大的异步功能.基于Javascript为Node.js设计,同一时候也能够直接在浏览器中使用. Async提供了大约20个函数,包含经常 ...

  5. 从一到面试题了解js异步机制:setTimeout 和 Pronmise

    1.毫无疑问setTimeout是最晚输出的 2.请无视undefined,这是浏览器的返回值. 3.new Promise中并不是异步,而.then()后才是异步.

  6. JS 冒泡事件顺序

    参考:https://www.cnblogs.com/diaoyan/p/5630014.html

  7. js异步队列之理解

    起因 最近看到一篇关于js异步执行顺序的解答,觉得有所收获,遂记录下来. marcotask和microtask js中异步队列可以分为两类,marcotask队列和microtask队列, marc ...

  8. 一个例子读懂 JS 异步编程: Callback / Promise / Generator / Async

    JS异步编程实践理解 回顾JS异步编程方法的发展,主要有以下几种方式: Callback Promise Generator Async 需求 显示购物车商品列表的页面,用户可以勾选想要删除商品(单选 ...

  9. JS异步编程 (2) - Promise、Generator、async/await

    JS异步编程 (2) - Promise.Generator.async/await 上篇文章我们讲了下JS异步编程的相关知识,比如什么是异步,为什么要使用异步编程以及在浏览器中JS如何实现异步的.最 ...

随机推荐

  1. smbtar - 直接备份SMB/CIFS共享资源到UNIX磁带设备的shell脚本

    总览 smbtar -s server [-p password] [-x service] [-X] [-d directory] [-u user] [-t tape] [-b blocksize ...

  2. 06.Linux-RedHat系统网卡服务连不上活跃连接路径变化

    问题:在新装的系统中,重启网卡的时候出现如下报错 [root@localhost ~]# service network restart 正在关闭接口 eth0: 设备状态:3 (断开连接) [确定] ...

  3. [SCOI2010]股票交易(单调队列优化dp)

    [SCOI2010]股票交易 题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第 ...

  4. AES apache commons-crypto 对称加密

    apache实现的AES256加密 官方用户指导链接:http://commons.apache.org/proper/commons-crypto/userguide.html 官方字节缓存实现的例 ...

  5. 批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹

    java,python等语言对于rft的处理很受限,rtf提供了很少的api供外部调用处理,但是对于docx我们却又很多api来处理,所以很多人会有需求将rtf批量转为docx的需求,接下来就来说说解 ...

  6. oracle跟踪

    select sql_text --sql文本的前1000个字符 ,first_load_time --初次载入时间 ,last_load_time --最后载入时间 ,s.sql_fulltext ...

  7. 使用stylelint进行Vue项目样式检查

    stylelint是一个强大的现代 CSS 检测器,可以让开发者在样式表中遵循一致的约定和避免错误.拥有超过170条的规则,包括捕捉错误.最佳实践.控制可以使用的语言特性和强制代码风格规范.它支持最新 ...

  8. 获取当前的方法名字,运用线程类Thread

    得到当前方法的名字String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); getStackTrac ...

  9. Pycharm的debug单步调试

    首先设置断点,点击行号显示的一侧,在指定行设置断点.比如这里,我们设断点在创建对象时: .如果这时我们直接右键run这个代码.他还是会直接运行,不会理会断点 结果 所以要右键选择run下面的debug ...

  10. mysql Got a packet bigger than 'max_allowed_packet' bytes

    背景 数据库备份执行SQL文件时,执行到图片表插入图片数据时错误: 错误提示:Got a packet bigger than 'max_allowed_packet' bytes 原因分析及解决 m ...