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è)被rejected
的Promise
對(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);
});
在上面的例子中,promise1
和promise2
分別是已經(jīng)被resolved
的Promise
對(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
、promise2
和promise3
的結(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
。