promise.all은

프로미스가 담겨 있는 배열등을 인자로 전달받는다. 전달받은 배열들을 병렬로 처리한다. 그리고 처리한 프로미스들을 처리후 resolve하는 새로은 프로미스를 다시 배열에 담아 리턴한다. 배열에 담기는 순서는 인자의 순서대로 담긴다. 이때 하나라도 reject가 있다면 reject가 가장 먼저 담긴다.

Promise.all([
  new Promise(resolve => setTimeout(() => resolve(1), 3000)), // 1
  new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2
  new Promise(resolve => setTimeout(() => resolve(3), 1000))  // 3
]).then(console.log) // [ 1, 2, 3 ]
  .catch(console.log);
// 무엇이 먼저 끝나더라도 프로미스의 순서대로 담긴다.

promise.rase

가장 먼저 처리된 프로미스가 resolve한 처리 결과를 resolve하는 새로운 프로미스를 반환한다.

Promise.race([
  new Promise(resolve => setTimeout(() => resolve(1), 3000)), // 1
  new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2
  new Promise(resolve => setTimeout(() => resolve(3), 1000))  // 3
]).then(console.log) // 3
  .catch(console.log);