1. Promise 基础概念
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
2. 状态图解

3. 常见问题(面试题)
a) 是否可以用return代替resolve?
i. 不可以,无法实现链式调用,且不符合规范。示例如下:

ii.
iii. 执行结果:

1. 无法改变状态,2. 无法链式调用
b) 使用throw还是reject?
i.
如图所示
:
ii. 

iii. 执行结果:

iv.1. Promise的构造函数,以及被 then 调用执行的函数基本上都可以认为是在try…catch 代码块中执行的,所以在这些代码中即使使用 throw, 程序本身也不会因为异常而终止。Promise的状态也不会发生改变。
4. Promise执行时间(面试题)
a) resolve后面的代码会不会被执行?
i. 、

ii. 执行结果:
iii.

1. 当没有Error的时候,resolve会将Promise.then放在微任务队列中,当所有的宏任务执行结束的时候,执行微任务队列。
2. 当有Error的时候,Error后面的代码不会被执行,但是Promise的结果依旧是fulfilled
b) 当Promise 遇到setTimeout
i.

ii. 执行结果:
iii.

1. 执行顺序:1 => 2 => 4(宏任务结束)=>3(微任务结束)
5.async/await 与Promise
a) 一句话总结:await等的就是一个Promise,如果不是Promise,如果不是,那await将会无效,加不加没区别。
i. 将常规的回调转变为 Promise 的方法
ii.

iii. 将Promise转变成 async/await

在这里有份前端的面试资料想送给大家,有需要的收藏并私信就可以免费获取喔。
本文来自WEB明教光明顶(https://web.xingruanedu.com)