Promise的实现原理
- 作用:异步问题同步化解决方案,解决回调地狱、链式操作
- 原理:
- 状态:pending、fufilled reject
- 构造函数传入一个函数,resolve进入then,reject进入catch
- 静态方法:resolve reject all any react
new Promise((resolve, reject) => {})
.catch(e => e)
.then(res => {}).finally()// 全部满足走then,err是最前的一个reject
Promise.all([p1(), p2,() p3()])
.then(([r1, r2, r3]) => {})
.catch(err => {})// 全部不满足走catch,value是最前的一个resovle, err是一段文本全部错误
Promise.any([p1(), p2,() p3()])
.then(value => {})
.catch(err => {})// p1、p2、p3谁的计算速度最快(慢的那些不管) 最快的resolve走then,reject走catch
Promise.race([p1(), p2,() p3()])
.then(value => {})
.catch(err => {})
-
缺点:一旦执行将无法终止;处于pending状态,无法得知目前进展哪个阶段
-
Primise本身就是同步,只是then或catch触发异步操作
-
Generator:
- 是一个可以暂停和继续执行的函数;
- 包含两部分:函数名前加 *;函数内用yield关键字返回值
-
async await
- 遵循Generator函数的语法糖,async对应* await对应yield
- async是加载函数钱的修饰符,声明一个异步函数,返回一个Promise对象
- await也是一个修饰符,只能放在async定义的函数内,可理解为等待的意思,await紧跟任意表达式
- 缺点:过多使用await会造成同步阻塞
-
区别:
- 都是为了解决异步流程的问题,promise是约定,而async更优雅更美观
- async基于promise实现,不需要处理resolve值。还避免嵌套代码
- async让try catch可以处理同步和异步错误