1.异步编程
异步行为是为了优化因计算量大而 时间长的操作。
如果在等待其他操作完成的同时,即使运行其他指令,系统也能保持稳定,那么这样做就是务实的。
异步操作并不一定计算量大或要等很长时间。只要你不想为等待某个异步操作而阻塞线程执行,那么任何时候都可以使用。
同步与异步
- 同步行为对应内存中顺序执行的处理器指令
- 异步行为类似于系统中断,即当前进程外部的实体可以触发代码执行
以往的异步编程模式(回调地狱)
在早期的 JavaScript 中,只支持定义回调函数 来表明异步操作完成。串联多个异步操作是一个常见的问题,通常需要深度嵌套的回调函数(俗称“回 调地狱”)来解决。
2.Promise
Promise基础
Promise是一个有状态的对象,可能处于如下3中状态之一(Promise的状态是私有的)
-
pending(待定
-
resolved/ fulfillled (解决/兑现
-
rejected (拒绝
无论变为哪种状态都是不可逆的
Promise的两大用途
- 抽象地表示一个异步操作
- Promise封装的异步操作会实际生成某个值,而Promise状态改变时可以访问这个值
通过执行函数控制Promise状态
由于Promise的状态是私有的,所以只能在内部进行操作。内部操作在Promise的执行器函数中完成。
执行器函数的两项职责
- 初始化期约的异步行为
- 控制状态的最终转换(通过调用resolve()和 re