Review——JS的异步与同步
一、概念
同步(synchronous):指在js的主线程上,所有任务被依次执行;
异步(asynchronous):指任务不进入主线程,进入任务队列(task);当“任务队列”通知主线程,异步任务才进入主线程执行。
二、异步的机制
- 同步任务都在主线程上执行,形成一个“任务栈”;
- 异步任务在“任务队列”中放置一个事件;
- 主线程的“任务栈”执行完毕后,“任务队列”里的任务被唤醒,从而进入主线程执行;
- 主线程不断重复上面三步。
任务队列里的事件主要指IO设备或用户行为触发的事件。
三、异步函数
- setTimeout
- setInterval
- Promise
三个状态:Pending,Fulfilled,Rejected。
核心方法:resolve/then/reject/catch/all/race
- async await
四、promise和async/await的区别
Promise
- const makeRequest = () =>
- getJSON()
- .then(data => {
- console.log(data)
- return "done"
- })
- makeRequest()
Async/Await
- const makeRequest = async () => {
- console.log(await getJSON())
- return "done"
- }
- makeRequest()
综上,Async更简洁。
Review——JS的异步与同步的更多相关文章
- Node.js模拟发起http请求从异步转同步的5种方法
使用Node.js模拟发起http请求很常用的,但是由于Node模块(原生和第三方库)提供里面的方法都是异步,对于很多场景下应用很麻烦,不如同步来的方便.下面总结了几个常见的库API从异步转同步的几种 ...
- Node.js学习笔记(6)--异步变同步
说明(2017-5-3 14:59:03): 1. 异步变同步: var fs = require("fs"); var documents = []; fs.readdir(&q ...
- 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制
转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...
- 漫话JavaScript与异步·第三话——Generator:化异步为同步
一.Promise并非完美 我在上一话中介绍了Promise,这种模式增强了事件订阅机制,很好地解决了控制反转带来的信任问题.硬编码回调执行顺序造成的"回调金字塔"问题,无疑大大提 ...
- js的异步加载你真的懂吗
面试高频之js的异步加载 讲这个问题之前, 我们从另一个面试高频问题来切入, 我们的web页面从开始解析到页面渲染完成都经历了什么 ? 1 , 创建document对象, 开始解析页面, ...
- js的异步和单线程
最近,同事之间做技术分享的时候提到了一个问题"js的异步是另开一个线程吗?"当时为此争论不休.会后自己查阅了一些资料,对这个问题进行一个自我的分析与总结,有不同意见的希望可以赐教, ...
- 探秘JS的异步单线程
对于通常的developer(特别是那些具备并行计算/多线程背景知识的developer)来讲,js的异步处理着实称得上诡异.而这个诡异从结果上讲,是由js的“单线程”这个特性所导致的. 我曾尝试用“ ...
- JS的异步世界
前言 JS的异步由来已久,各种异步概念也早早堆在开发者面前.可现实代码中,仍然充斥了各种因异步顺序处理不当的bug,或因不好好思考,或因不了解真相.今天,就特来再次好好探索一番JS的异步世界. 01 ...
- ajax中的async属性值之同步和异步及同步和异步区别
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里 ...
随机推荐
- 大数据技术之_19_Spark学习_01_Spark 基础解析小结(无图片)
1.准备安装包 2.Spark Standalone 即独立模式 2.1.解压安装包到你安装的目录. 2.2.拷贝 conf 目录下的 slaves 文件,将 slave 节点的 hostname ...
- 转的很好的前端html 内容
HTML 初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s ...
- POJ 2350
#include<iostream> #include<stdio.h> #include<iomanip> using namespace std; int ma ...
- Jvm内存工具
1,JConsole 位于 [JDK] bin 下, 2,代码查看当前进程堆内存 long maxMemory = Runtime.getRuntime().maxMemory();long tot ...
- 使用findbugs为自己的代码review
转自:http://blog.lichengwu.cn/java/2013/11/24/use-findbugs-code-review/ 介绍 Findbugs是一个代码静态分析工具,用来找出Jav ...
- 异步加载的JS如何在chrome浏览器断点调试?
我们常常利用chrome强大的控制台Sources下面进行代码断点调试,但是通过$.getScript等异步加载JS的方式在Sources里面就是找不到,那如何进行debug断点调试呢? 方案一: 在 ...
- Lingo 做线性规划 - Financial Applications
Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...
- wordpress常用标记
博客地址:bloginfo('url'); 博客名称:bloginfo("name"); 博客描述:bloginfo("decription"); 文章内容: ...
- Hbase 维护
停止 regionserver : ./graceful_stop.sh host
- 快速获取 json对象的长度
JSON对象的长度,也就是k-v的个数(这里不包含隐式属性 ). 通过 Object.keys(obj) 获取到 keys组成的数组, 再获取length. var obj = { a:1, b ...