promise和async难点解析

56 阅读2分钟

promise的链式调用(then的返回值)

回调函数内的逻辑返回值返回的promise的结果
没有return值时默认返回一个成功状态的promiseunderfind
有return值时且不是promise时默认返回一个成功状态的promise,promise的结果为return的值
有return值时且是promise类型时返回这个promise,promise的状态取和值决于promise的回调promise的值决于promise的回调
抛出错误时返回一个失败状态的promisereason 报错

注: 因为promise.then是异步的原因,浏览器显示其返回值有延迟,会出错

catch

catch方法和then的返回值一样 注:promise存在内在穿透,当前面的promise使用reject抛出错误时,即便隔着许多then,catch也能捕捉到。

中止promise,让后面的then链不执行

在then的回调函数中return一个pending状态的promise

一个promise指定多个then或catch的回调

指定几个就执行几个

promise指定回调与状态改变的先后顺序问题

  1. 普通情况: 先改变状态后指定回调
  2. resolve或reject被异步任务包裹: 先指定回调后改变状态
  3. 都被包裹时: 和第一种一样

注: 是指定回调不是执行回调

promise的方法

方法作用
all等到传入的promise数组执行完,返回一个promise,传入的promise数组有一个状态为reject,返回的promise的状态就为reject。返回promise的值为参数promise数组的值的数组
allSettled不管传入的promise数组的成功还是失败,最后返回一个成功的promise,值为传入的promise的执行结果的数组
any任意一个成功即结束,返回传入的数组索引为0的promise的结果
race哪个结束的快返回哪一个
reject总是得到一个失败的promise,不论是传入的普通值还是promise,也不管传入promise的成功还是失败,promise结果或是普通值或是promise,这个promise受传入的影响
resolve1. 传入普通值: 得到一个成功的promise,promise的值为传入的值 2. 传入成功的promise:返回一个成功的promise,结果为传入promise的结果; 3. 传入一个失败的promise: 返回一个失败的promise,结果为抛出的错误

await的返回值

await后跟的数据返回值
非promise数据它的值是什么,返回值就是什么
为promise类型的数据得到promise的结果
为失败的promise类型的数据通过try——catch进行捕捉

宏任务微任务

执行顺序: 同 => 微=> 宏

image.png