Promise.all() 方法的使用

29 篇文章 0 订阅

 Promise.all() 方法是一个 Promise 对象方法,可以将多个 Promise 实例包装成一个新的 Promise 对象,最终返回一个数组,其中包含所有 Promise 实例的返回值。

它的语法如下:

Promise.all(iterable);

  其中,iterable 参数是一个可迭代对象,它可以是一个数组、一个 Set 对象等,但是其中必须包含多个 Promise 实例。如果其中有任何一个 Promise 实例出现了错误或者被拒绝,最终的 Promise 对象也会失败并抛出错误。

Promise.all() 方法的使用场景包括多个异步操作的情况,可以将多个 Promise 实例合并起来,并在它们都完成之后进行统一处理,可以提高代码的效率和可读性。

下面是一个例子,演示如何使用 Promise.all() 方法合并多个异步操作:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => resolve('promise1 resolved'), 1000)
})

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => resolve('promise2 resolved'), 2000)
})

const promise3 = new Promise((resolve, reject) => {
  setTimeout(() => resolve('promise3 resolved'), 3000)
})

Promise.all([promise1, promise2, promise3]).then(values => {
  console.log(values)  // ['promise1 resolved', 'promise2 resolved', 'promise3 resolved']
})

 在这个例子中,使用 Promise.all() 方法将三个 Promise 实例合并起来,最终返回一个新的 Promise 对象。在新的 Promise 对象的回调函数中,可以获取每个 Promise 实例的返回值,并将其打印在控制台上。

另外,需要注意的是, Promise.all() 方法会等待所有 Promise 实例完成,即所有 Promise 实例的状态都变为 resolved 或者其中任何一个 Promise 实例的状态变为 rejected 才会结束。因此,在使用 Promise.all() 方法时需要确保传入的所有 Promise 实例都能够有结果返回。否则,会导致该方法一直处于等待状态,无法结束。

实际项目中应用案例: 由于这部分代码在项目中多次使用,这里封装成一个方法以便复用。需要注意的是,涉及到异步操作,需要在方法内部返回一个 Promise 对象或者使用 async/await 等方式,以确保异步操作完成后返回数据。

案例一、使用 async/await

// 获取站点信息
getSationInfo(this.stationCode).then(response => {
this.stationInfo = response.data;
});

//获取因子
this.ParamConfList();

let query = {
  stationCode: this.stationCode,
  searchType: this.dataType
};

// 获取表格标题行
getTableHeader(query).then(response => {
  this.tableHeader = response.data;
})

 下面将这段代码封装成一个名为 getStationData方法

methods: {
  async getStationData() {
    const query = {
      stationCode: this.stationCode,
      searchType: this.dataType
    };

    try {
      const [infoResponse, headerResponse] = await Promise.all([
        getSationInfo(this.stationCode),
        getTableHeader(query)
      ]);

      this.stationInfo = infoResponse.data;
      this.tableHeader = headerResponse.data;
      this.ParamConfList();
    } catch (error) {
      console.log(error);
    }
  }
}

 在这个例子中,使用了 Promise.all() 方法将两个异步操作合并成一个 Promise 对象,并使用 async/await 等方式等待异步操作完成。

使用这个方法时,可以将原来的代码替换为调用 getStationData() 方法的代码:

this.getStationData();

 这样就可以在代码中多次复用 getStationData() 方法,而不必每次都编写相同的代码。

 案例二 .then 形式

 

        async initSelectOptions() {
          try{
            Promise.all([this.getStationType('072'), this.getNrgSettllment('070'), ]).then(res => {
              // console.log(res)
              this.selectOptions[0].options = res[0] 
              this.selectOptions[1].options = res[1] 
            })
          }catch(e){
            console.log(e)
          }
        },

        // 1、
        async getStationType(id) {
          const res = await GetDictListByid({
            dictId: id
          })
          // console.log(res)
          return res.data
        },
        // 2、
        async getNrgSettllment(id) {
          const res = await GetDictListByid({
            dictId: id
          })
          // console.log(res)
          return res.data
        },

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promise.all 方法接收一个 Promise 数组作为参数,并且返回一个新的 Promise 对象。该新的 Promise 对象在所有 Promise 对象都变为 resolved 状态时才会被 resolved,或者在任意一个 Promise 对象变为 rejected 状态时被 rejected。返回的 Promise 对象的结果将是一个包含所有 Promise 对象结果的数组,其顺序与传入的 Promise 数组顺序一致。 以下是一个使用 Promise.all 方法的示例: ```javascript const promise1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise 1 resolved'); }, 1000); }); const promise2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise 2 resolved'); }, 2000); }); const promise3 = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise 3 resolved'); }, 1500); }); Promise.all([promise1, promise2, promise3]) .then(results => { console.log(results); // ['Promise 1 resolved', 'Promise 2 resolved', 'Promise 3 resolved'] }) .catch(error => { console.log(error); }); ``` Promise.race 方法也接收一个 Promise 数组作为参数,并且返回一个新的 Promise 对象。该新的 Promise 对象将与最先完成(无论是 resolved 或 rejected)的 Promise 对象具有相同的状态。 以下是一个使用 Promise.race 方法的示例: ```javascript const promise1 = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise 1 resolved'); }, 1000); }); const promise2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('Promise 2 resolved'); }, 2000); }); const promise3 = new Promise((resolve, reject) => { setTimeout(() => { reject('Promise 3 rejected'); }, 1500); }); Promise.race([promise1, promise2, promise3]) .then(result => { console.log(result); // 'Promise 1 resolved' }) .catch(error => { console.log(error); // 'Promise 3 rejected' }); ``` 使用 Promise.all 方法Promise.race 方法可以更方便地处理多个 Promise 对象的状态和结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值