Promise 深度理解

Promise 深度理解

在理解 Promise 之前,要先理解什么是异步编程。JavaScript 的异步编程比较特殊,我们一般称之为单线程异步编程

JS 单线程异步编程

JS 是单线程的

JavaScript 同时只能处理一件事情。上面的代码还没执行完成,则无法执行下面的代码。
JavaScript 中也有部分操作是异步编程。

JavaScript 绝非我们传统编程中的多线程开发,可以同时做多件事情。因为是单线程处理,所以如果 JavaScript 引擎正在处理任务,其他任务就不会被处理。

浏览器基于 EventQueue事件队列, EventLoop事件循环 两大机制,构建出了异步编程的效果

异步宏任务

  1. 定时器
  2. DOM 事件
  3. Http 请求(ajax, fetch, jsonp,…)

异步微任务

  1. Promise(resolve, reject, then)
  2. async await
  3. requestAnimationFrame

进入异步队列(EventQueue)的查找顺序

  1. 首先去异步微任务队列中查找
  2. 再去异步宏任务队列中查找
  3. 事件循环机制 EventLoop
    同步任务执行完毕 => 查找异步队列可执行任务,主线程执行,执行完毕 => 查找异步队列任务执行

promise 执行过程

手写一个 Promise