promise构造函数上的静态方法
Promise.all():
- 接受一个数组,数组中放入需要处理的promise实例
- 当所有的promise实例全部执行成功的时候,all方法返回成功的promise实例,值为内部所有promise实例的成功值组成的数组
- 当all方法中有任何一个promise实例出现失败,则all方法直接返回失败,值为内部失败promise实例的值 Promise.allSettled:
- 可以监听多个promise,当所有的promise实例全部执行结束(状态转换结束),则返回一个结果
- allSettled方法永远返回成功状态,代表所有监听的promise实例全部执行完毕
- allSettled返回的promise实例的值是:所有监听promise实例对象组成的数组 -解释:.allSettled的返回值,它自己的状态是永远成功的,但是它会收集所有的promise实例,将他们的状态和值组成对象,放到一个数组中.
Promise.race:
- 可以监听多个promise,监听所有实例中改变得到结果最快那个promise实例
- 无论速度最快的promise实例是成功还是失败,race方法返回的promise实例的状态和值 和 最快的promise实例保持一致
Promise.any:
- 可以监听多个promise,返回一个promise实例,实例的状态和值永远和第一个成功状态的promise状态和值一致
- 如果所有的promise全部失败,则返回一个新的错误类型:AggregateError: All promises were rejected,primise状态是失败的
Promise.resolve():
- 快速的得到一个成功状态的promise对象,参数默认是这个promise对象的值
- 如果resolve静态方法的参数是一个promise实例,则resolve返回的promise实例和内部函数的promise实例保持一致
Promise.reject():
- 快速的得到一个失败状态的promise对象,参数是这个promise对象的值
- 如果reject静态方法内部传递一个promise实例,则reject方法仍然永远返回失败的,值是这个promise实例
- 注意和成功的区别,这个无论成功和失败,值都是一个promises实例
async和await方法
1.async和await:
- 专门用来解决异步编程问题,是终极解决方案,用同步表达异步操作
- async是用来声明某个函数是异步函数(认为是generator中的*),await是等待一个异步的执行(相当于是yield)
2.await的使用:
- await只能等待promise实例,其他的一概不等(但是await语句后的所有都变成了异步)
- await等待的promise实例变成成功状态了,则继续向下之后await语句后的内容,await返回当前成功promise实例的值
- 当await等待的是失败的promise实例的时候,则直接退出当前async函数,不再执行函数的其他语句
3.async函数的返回值:
- 默认返回成功的promise实例,值为async函数内部return的值
- 当async中的await等待的是失败的promise实例的时候,async函数直接返回失败的promise实例,值为内部失败promise实例的值
- 当async函数内部报错,则async函数直接返回失败的promise实例,只为错误信息
await如果等待的不是promise对象,则一概不等待,
然后await整个语句后所有的代码都变成了异步代码了
async function fn() {
await setTimeout(() => {
console.log(1);
}, 2000);
console.log(2);
}
fn();
console.log(3);
打印:3 2 1
await关键字,在执行它后面紧接着代码的语句,发现它不是promise之后,就不等它了,它会设置计时器但是不会等着它执行。
打印:1 3 2
//1的打印并不是异步,因为await a 是先执行a 然后再await,所以a的执行是同步的
async function fn() {
await console.log(1);
console.log(2);
}
fn();
console.log(3); */