最近学习es6 看到promise和generater,最后发现他们的共同点都是通过维护状态来解决异步的一种方式,
由于js单线程运行的特点,所以前端编程一直离不开异步这个概念,先把这个知识点进行梳理。
先看同步问题,同步很简单就是程序排队执行,但同步会存在阻塞问题
同步阻塞:
// 这是一个阻塞式函数, 将一个文件复制到另一个文件上
function copyBigFile(afile, bfile){
var result = copyFileSync(afile,bfile);
return result;
}
如上所示若copyFileSync用时一小时那么一小时后copyBigFile才会有返回结果,这就是同步阻塞。
所以js异步的出现来解决同步阻塞问题
异步概念:异步就是cpu跳过等待,先处理后续的任务(JavaScript 语言对异步编程的实现,就是回调函数)
先看js在单线程下如何实现异步操作:
如上图为JS运行机制图(事件循环示例图),流程如下:
step1:主线程读取JS代码,此时为同步环境,形成相应的堆和执行栈;
step2: 主线程遇到异步任务,指给对应的异步进程进行处理(WEB API);
step3: 异步进程处理完毕(Aj