promise的链式调用(then的返回值)
| 回调函数内的逻辑 | 返回值 | 返回的promise的结果 |
|---|---|---|
| 没有return值时 | 默认返回一个成功状态的promise | underfind |
| 有return值时且不是promise时 | 默认返回一个成功状态的promise,promise的结果为 | return的值 |
| 有return值时且是promise类型时 | 返回这个promise,promise的状态取和值决于promise的回调 | promise的值决于promise的回调 |
| 抛出错误时 | 返回一个失败状态的promise | reason 报错 |
注: 因为promise.then是异步的原因,浏览器显示其返回值有延迟,会出错
catch
catch方法和then的返回值一样 注:promise存在内在穿透,当前面的promise使用reject抛出错误时,即便隔着许多then,catch也能捕捉到。
中止promise,让后面的then链不执行
在then的回调函数中return一个pending状态的promise
一个promise指定多个then或catch的回调
指定几个就执行几个
promise指定回调与状态改变的先后顺序问题
- 普通情况: 先改变状态后指定回调
- resolve或reject被异步任务包裹: 先指定回调后改变状态
- 都被包裹时: 和第一种一样
注: 是指定回调不是执行回调
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受传入的影响 |
| resolve | 1. 传入普通值: 得到一个成功的promise,promise的值为传入的值 2. 传入成功的promise:返回一个成功的promise,结果为传入promise的结果; 3. 传入一个失败的promise: 返回一个失败的promise,结果为抛出的错误 |
await的返回值
| await后跟的数据 | 返回值 |
|---|---|
| 非promise数据 | 它的值是什么,返回值就是什么 |
| 为promise类型的数据 | 得到promise的结果 |
| 为失败的promise类型的数据 | 通过try——catch进行捕捉 |
宏任务微任务
执行顺序: 同 => 微=> 宏