浅谈 JS 异步编程
JS 的单线程特性就意味着所有的执行任务需要进行排队,随即便有了同步(阻塞)和异步(非阻塞)两种任务。
一、那么异步任务是怎么执行的呢?
那么先来看看异步的执行机制
进入执行栈的分为:同步和异步两种任务,同步任务直接执行获取结果,异步执行任务并把对应的回调放入到任务队列中。

异步任务又分为两种:宏任务(如:setTimeOut)和微任务(如:promise),两种任务处于不同的任务队列,微任务的优先级高于宏任务,会优先执行完当前队列中的所有的微任务再执行宏任务。

二、异步发展历史
1 | 回调 -> 监听 -> 订阅/发布 -> promise -> generators -> async/await |
三、各种的特性
1、回调
1 | var fs = require('fs'); |
2、事件监听
1 | // 事件监听 |
3、订阅/发布
某种意义上事件监听也属于订阅分布模式
1 | // 事件监听 |
4、promise
1 | var fs = require('fs'); |
5、generators
1 | function * generatorRead() { |
6、async/await
1 | // async |
参考:
https://developer.mozilla.org/zh-CN/docs/learn/JavaScript/%E5%BC%82%E6%AD%A5
https://zhuanlan.zhihu.com/p/26567159
https://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html