Promise 深度理解
在理解 Promise 之前,要先理解什么是异步编程。JavaScript 的异步编程比较特殊,我们一般称之为单线程异步编程。
JS 单线程异步编程
JS 是单线程的
JavaScript 同时只能处理一件事情。上面的代码还没执行完成,则无法执行下面的代码。JavaScript 中也有部分操作是异步编程。
但 JavaScript 绝非我们传统编程中的多线程开发,可以同时做多件事情。因为是单线程处理,所以如果 JavaScript 引擎正在处理任务,其他任务就不会被处理。
浏览器基于 EventQueue事件队列, EventLoop事件循环 两大机制,构建出了异步编程的效果。
异步宏任务
- 定时器
- DOM 事件
- Http 请求(ajax, fetch, jsonp,…)
异步微任务
- Promise(resolve, reject, then)
- async await
- requestAnimationFrame
进入异步队列(EventQueue)的查找顺序
- 首先去异步微任务队列中查找
- 再去异步宏任务队列中查找
- 事件循环机制
EventLoop
同步任务执行完毕 => 查找异步队列可执行任务,主线程执行,执行完毕 => 查找异步队列任务执行