“这是我参与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:如有错误,还希望大家指出,谢谢。