Promise.all은 프로미스로 구성된 배열(이터러블 객체)을 받아 프로미스로 반환한다.
배열 안의 프로미스가 다 실행이 된 후의 결과값을 담은 배열을 반환한다.
배열 안의 프로미스 중 한가지라도 error가 발생한다면, 배열 안의 값은 다 무시된다.
실행 시간에 관계 없이 순서대로 배열에 담기며, 가장 늦은 시간을 기준으로 배열에 담긴다.Promise.all([ new Promise(resolve => setTimeout(() => resolve('하나'), 3000)), new Promise(resolve => setTimeout(() => resolve('둘'), 2000)), new Promise(resolve => setTimeout(() => resolve('셋'), 1000)) ]).then(num => console.log(num)); // ['하나', '둘', '셋']
Promise.allsettled는 모든 배열의 프로미스들이 처리될 때 까지 기다린 후 반환 값으로
'fullfilled' 상태의 값과 'rejected' 상태의 이유가 담겨 처리 할 수 있다.[ {status: 'fulfilled', value: ...응답...}, {status: 'fulfilled', value: ...응답...}, {status: 'rejected', reason: ...에러 객체...} ] // 요런 식으로 담긴다.
Promise.race는 Promise.all과 비슷 하지만, 가장 먼저 처리되는 결과나 에러를 반환한다.
Promise.race([ new Promise((resolve, reject) => setTimeout(() => reject(new Error("에러 발생!")), 3000)), new Promise((resolve, reject) => setTimeout(() => resolve('What???'), 4000)), new Promise((resolve, reject) => setTimeout(() => resolve(3), 6000)) ]).then(alert); // Uncaught (in promise) Error: 에러 발생!