프라미스 API

Vorhandenheit ·2021년 10월 6일
0

JS.코어

목록 보기
27/29
post-custom-banner

프라미스 API

Promise 클래스에는 5가지 정적 메서드가 있음

1.Promise.all

  • promise.all 은 복수의 url에 동시에 요청을 보내고, 다운로드가 모두 완료된 후에 콘텐츠를 처리할 때 사용할 수 있음
  • 배열 안 프라미스가 모두 처리되면 새로운 프라미스가 이행, 배열 안 프라미스의 결과값을 담은 새로운 배열이 result가 됨
  • 첫 번째 프라미스가 가장 늦게 이행되더라도 처리 결과는 배열의 첫 번째 요소에 저장
let promise = 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(alert); //1,2,3이 반환
let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://api.github.com/users/jeresig'
];

let requests = urls.map(el => fetch(el));

Promise.all(requests)
	.then(responses => response.forEach(
	response => alert(`${response.url} : ${response.status}`)
));

promise.all에 전달되는 프라미스 중 하나라도 거부되면, promise.all이 반환하는 프라미스는 에러와 함께 바로 거부! 아예 안됨!

'일반 값'도 Promise.all(iterable)에 넘길 수 있음

Promise.all([
	new Promise((resolve, reject) => {
    	setTimeout(() => resolve(1), 1000)
    }),
  	2,
  	3
]).then(alert); // 1, 2, 3

2. Promise.allSettled

  • promise.all은 프라미스가 하나라도 거절되면 전체를 거절, 하지만 promise.allSetteled는 모든 프라미스가 처리될 때까지 기다림

  • 반환되는 배열은 다음과 같은 요소를 가지고 있음
    {stats: "fulfilled", value: result} : 응답이 성공할 경우
    {status: "rejected", reason: error} : 에러가 발생할 경우

let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://no-such-url'
];

Promise.allSettled(urls.map(url => fetch(url)))
	.then(results => {
	results.forEach((result, num) => {
    	if (result.status == 'fulfilled') {
        	alert(`${urls[num]} : ${result.value.status}`);
        }
      	if (result.status == 'rejected') {
     		alert(`${urls[num} : ${results.reason}`)   
        }
    })
})

3. Promise.race

Promise.race는 Promise.all과 비슷
가장 먼저 처리되는 프라미스의 결과(에러)를 반환

Promise.race([
	new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000)),
  	new Promise((resolve, reject) => setTimeout(() => reject(new Error('에러 발생!')), 2000)),
  	new Promise((resolve, reject) => setTimeout(() => resolve(3), 3000))
]).then(alert); // 1

4.Promise.resolve/reject

Promise.resolve

호환서을 위해 함수가 프라미스를 반환하도록 해야 할 때 사용할 수 있음

Promise.reject

결과값이 ERROR인 거부 상태 프라미스를 생성

let promise = new Promise((resolve, reject) => reject(error));
profile
읽고 기록하고 고민하고 사용하고 개발하자!
post-custom-banner

0개의 댓글