ES6中的Promise.all
是一個靜態方法,用于處理多個Promise
對象的并行執行。它接受一個Promise
對象的數組作為參數,并返回一個新的Promise
對象。
Promise.all
會等待所有的Promise
對象都變為resolved
狀態后才會返回,返回的Promise
對象的resolve
回調函數的參數是一個數組,包含了所有Promise
對象的結果。如果其中任何一個Promise
對象變為rejected
狀態,則返回的Promise
對象的reject
回調函數會被立即調用,并傳遞第一個被rejected
的Promise
對象的錯誤信息。
示例代碼如下:
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
分別是已經被resolved
的Promise
對象,而promise3
是一個在100ms后變為resolved
狀態的Promise
對象。Promise.all
會等待所有的Promise
對象都變為resolved
狀態后,返回一個新的Promise
對象,并將所有結果以數組的形式傳遞給resolve
回調函數。在這個例子中,values
數組包含了promise1
、promise2
和promise3
的結果,即[3, 42, 'foo']
。
如果其中任何一個Promise
對象變為rejected
狀態,如下所示:
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
});
在這個例子中,promise3
在100ms后變為rejected
狀態,Promise.all
會立即返回一個新的Promise
對象,并將promise3
的錯誤信息傳遞給reject
回調函數。因此,只會執行catch
回調函數,并輸出Error
。