[JavaScript] Asynchronous - Promise static methods

Promise class static methods

  • Promise.all
  • Promise.allSetteled
  • Prormise.race
  • Promise.any
  • Promise.resolve
  • Promise.reject

Promise class static methods

Promise.all

Most used in practice

Promise.all([promise1, promise2, ...])

배열의 모든 promise 객체에 대하여 promise 가 setteled 될 때까지 기다림. reject 된 Promise 가 존재할 경우, 멈추고 에러만 리턴함. Resolved 된 Promise 는 무시됨.

예1) 여러 URL 에서 데이터를 가져온 후 한번에 작업하고자 할 때.

Promise.all([
  new Promise((resolve)=> setTimeout(()=> resolve(1), 3000)),
  new Promise((resolve)=> setTimeout(()=> resolve(2), 2000)),
  new Promise((resolve)=> setTimeout(()=> resolve(3), 1000))
]).then(console.log);
// 모든 Promise 가 resolved 된 3 초 후에 [1, 2, 3] 이 출력된다.

예2) 통신해야 하는 URL 이 많을 경우:

let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://api.github.com/users/jeresig'
]

// 보통 map 을 써서 배열의 요소들을 Promise 객체로 만든 다음 Promise.all 을 사용한다.
let requests = urls.map(url => fetch(url));
Promise.all(requests)
.then(responses => { 
  return Promise.all(responses.map(response => response.json()));
})
.then(users => users.forEach(user => console.log(user.name)));

Promise.allSettled

모든 Promise 가 settled 된 결과를 리턴함. Error 리턴하는 Promise 도 함께 return 함.

Promise.race

제일 빨리 setteled 되는 하나의 Promise 를 return 한다. 나머지는 무시된다. Promise 들의 race(경주) 다.

Promise.any

제일 빨리 resolved 되는 하나의 Promise 를 return 한다. 나머지는 무시된다. 만약 모든 Promise 가 rejected 될 경우 AggregateError 객체를 return 한다. (a special error object that stores all promise errors in its errors property.)
aggregate - 합쳐진, 종합된 ([종합하다, 합치다], [종합])

Promise.resolve/reject

Rarely needed in modern code, because of async/awiat syntax.
Promise.resolve is almost never used.

// 아래의 두 코드는 같다.
let promise = new Promise.resolve('a');
let promise = new Promise(resolve => resolve('a'));
// Promise의 resolve 가 확실시 될 경우에 사용한다.

Advanced

Error handling with Promises
https://javascript.info/promise-error-handling

Promisification
https://javascript.info/promisify

Microtask queue
https://javascript.info/microtask-queue

좋은 웹페이지 즐겨찾기