Pomise的学习笔记-promise构造函数静态方法

226 阅读3分钟

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); */