ES6中promise.all的用法是什么

es6
小億
123
2023-12-21 16:46:07

ES6中的Promise.all是一個(gè)靜態(tài)方法,用于處理多個(gè)Promise對(duì)象的并行執(zhí)行。它接受一個(gè)Promise對(duì)象的數(shù)組作為參數(shù),并返回一個(gè)新的Promise對(duì)象。

Promise.all會(huì)等待所有的Promise對(duì)象都變?yōu)?code>resolved狀態(tài)后才會(huì)返回,返回的Promise對(duì)象的resolve回調(diào)函數(shù)的參數(shù)是一個(gè)數(shù)組,包含了所有Promise對(duì)象的結(jié)果。如果其中任何一個(gè)Promise對(duì)象變?yōu)?code>rejected狀態(tài),則返回的Promise對(duì)象的reject回調(diào)函數(shù)會(huì)被立即調(diào)用,并傳遞第一個(gè)被rejectedPromise對(duì)象的錯(cuò)誤信息。

示例代碼如下:

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values); // [3, 42, 'foo']
  })
  .catch(error => {
    console.error(error);
  });

在上面的例子中,promise1promise2分別是已經(jīng)被resolvedPromise對(duì)象,而promise3是一個(gè)在100ms后變?yōu)?code>resolved狀態(tài)的Promise對(duì)象。Promise.all會(huì)等待所有的Promise對(duì)象都變?yōu)?code>resolved狀態(tài)后,返回一個(gè)新的Promise對(duì)象,并將所有結(jié)果以數(shù)組的形式傳遞給resolve回調(diào)函數(shù)。在這個(gè)例子中,values數(shù)組包含了promise1、promise2promise3的結(jié)果,即[3, 42, 'foo']。

如果其中任何一個(gè)Promise對(duì)象變?yōu)?code>rejected狀態(tài),如下所示:

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(reject, 100, 'Error');
});

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values);
  })
  .catch(error => {
    console.error(error); // Error
  });

在這個(gè)例子中,promise3在100ms后變?yōu)?code>rejected狀態(tài),Promise.all會(huì)立即返回一個(gè)新的Promise對(duì)象,并將promise3的錯(cuò)誤信息傳遞給reject回調(diào)函數(shù)。因此,只會(huì)執(zhí)行catch回調(diào)函數(shù),并輸出Error。

0