前端小白不迷路-今天谈下promise.all()方法

604 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

前言: 大家周末愉快,前端小白不迷路,前面文章有写,promise如何解决回调函数的,今天我们来讲下promise.all方法的作用及应用场景。

promise.all() 的作用

promise.all()用于将多个promise实例,包装成一个新的promise实例,可以处理多个并行请求 promise.all()接收一个数组作为参数,数组里的元素都是promise对象的实例,如果不是,就会先调用下面讲到的promise.resolve(),将参数转为promise实例,再进一步处理。

> var p = new Promise.all([p1,p2,p3])
> p的状态由p1、p2、p3决定,分为两种情况。
> 1. 当该数组里的所有Promise实例都进入Fulfiled(成功的)状态,Promise.all返回的实例才会变成Fulfiled状态,并将Promise实例数组的所有返回值组成一个数组,传递给Promise.all 返回 实例的回调函数。

> 2. 当该数组里的某个Promise实例都进入Rejected(代表失败)zhuangt : Promise.all返回的实例会立即变成Rejected状态,并将第一个rejected的实例返回值 传递给Promise.all返回实例的回调函数。

promise.all() 的应用场景

需求:我们一进页面会同时发多个请求数据的接口,想要实现在接口还没请求回来之前页面显示loading状态,数据请求回来后,loading隐藏的效果,因为接口都是异步请求,没有先后之分,这样的话如何统一的实现在所有接口数据都请求完毕后让loading隐藏的效果呢?

promise.all() 代码实现:

methods(){
    aFn() {
        请求数据1
    },
    bFn() {
        请求数据2
    },
    cFn() {
        请求数据3
    },
},
created(){
    this.showLoading();  //这是定义的显示loading的方法
    const aData = this.aFn();
    const bData = this.bFn();
    const cData = this.cFn();
    //具体的请求方法这里就不举例了,简单代表
    Promise.all([aData, bData, cData])
    .then(res => {
        console.log(res)
        this.hideLoding()
    })  //三个promise都为成功的情况下执行 .then 
}

注意:

promise.all()方法的参数可以不是数组,但必须有iterator接口(Iterator是一种统一的接口机制,用来处理不同的数据结构),而且返回的每个成员都是promise实例。

总结:

我是LONCON,关注我,前端路一起走,成为更好的程序员! PS:如有错误,还希望大家指出,谢谢。