2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

비동기 프로그래밍에서 'promise race'의 사용법은 무엇인가요?

_____
Q1: Promise.race()란 무엇인가요?
A1: Promise.race()는 여러 개의 프로미스를 인자로 받아, 그 중 가장 먼저 이행(fulfilled)되거나 거부(rejected)된 프로미스의 결과값 또는 에러를 반환하는 메서드입니다.

Q2: Promise.race()의 기본 문법은 어떻게 되나요?
```javascript
Promise.race(iterable);
```
- iterable: 프로미스들의 배열 또는 이터러블 객체를 전달합니다.

Q3: Promise.race()가 반환하는 값은 무엇인가요?
A3: 가장 먼저 완료된 프로미스의 결과값을 그대로 반환합니다. 성공(fulfilled)이든 실패(rejected)든 가장 먼저 완료된 프로미스가 승자입니다.

Q4: Promise.race()를 언제 사용하는 것이 좋나요?
A4: 여러 비동기 작업 중 가장 빠른 결과를 얻고 싶을 때, 타임아웃 처리, 혹은 경쟁 상태를 구현할 때 유용합니다.

Q5: Promise.race() 사용 예시를 보여주세요.
```javascript
const promise1 = new Promise((resolve) => setTimeout(() => resolve('첫 번째 완료'), 500));
const promise2 = new Promise((resolve) => setTimeout(() => resolve('두 번째 완료'), 100));

Promise.race([promise1, promise2])
.then(result => console.log(result)) // 출력: '두 번째 완료'
.catch(error => console.error(error));
```

Q6: Promise.race()와 Promise.all()의 차이는 무엇인가요?
A6: Promise.race()는 가장 먼저 완료된 프로미스 하나의 결과를 반환하지만, Promise.all()은 모든 프로미스가 완료될 때까지 기다려 모든 결과를 배열로 반환합니다. 실패가 하나라도 있으면 Promise.all()은 즉시 거부됩니다.

Q7: 프로미스 중 하나가 거부되면 어떻게 되나요?
A7: 가장 빠르게 거부된 프로미스가 있으면 Promise.race()는 즉시 거부 상태로 전환되고 에러를 반환합니다.

Q8: 타임아웃 처리 시 Promise.race()를 어떻게 사용하는가요?
```javascript
const fetchData = fetch('https://example.com/data');
const timeout = new Promise((_, reject) =>
setTimeout(() => reject(new Error('요청 시간 초과')), 3000)
);

Promise.race([fetchData, timeout])
.then(response => console.log('응답:', response))
.catch(error => console.error('에러:', error));
```

Q9: Promise.race()에서 전달하는 iterable에 프로미스가 아닌 값도 넣을 수 있나요?
A9: 네. 프로미스가 아닌 값은 자동으로 즉시 이행된 프로미스로 변환됩니다. 따라서 가장 빠른 프로미스가 아닌 값이면 그 값이 바로 반환됩니다.

Q10: Promise.race()가 취소(Cancellation)를 지원하나요?
A10: Promise 자체는 취소를 지원하지 않지만, race()로 경쟁 상태를 만들고 수동으로 상태를 관리해 취소처럼 동작하게 구현할 수는 있습니다. 다만 직접적인 취소 기능은 없습니다.
비동기 프로그래밍에서 'Promise.race()'는 여러 개의 Promise 객체 중에서 가장 먼저 완료된 Promise의 결과를 반환하는 메서드입니다. 이 메서드는 JavaScript의 Promise API의 일부로, 비동기 작업을 처리할 때 유용하게 사용됩니다. Promise.race()는 주로 여러 비동기 작업 중에서 가장 빠른 결과를 얻고자 할 때 사용됩니다. Promise.race()의 기본 사용법 `Promise.race()`는 다음과 같은 형식으로 사용됩니다: ```javascript Promise.race(iterable); ``` - iterable : Promise 객체를 포함하는 iterable(예: 배열)을 전달합니다. 반환값 `Promise.race()`는 가장 먼저 완료된 Promise의 결과를 포함하는 새로운 Promise를 반환합니다. 이 Promise는 다음과 같은 경우에 해결됩니다: 1. 성공 : 가장 먼저 완료된 Promise가 성공적으로 해결되면, 반환된 Promise도 성공적으로 해결됩니다. 2. 실패 : 가장 먼저 완료된 Promise가 거부되면, 반환된 Promise도 거부됩니다. 예제 다음은 `Promise.race()`의 <a href='https://sangseek.com/sangseeks/사용 예제/ko'>사용 예제</a>입니다: ```javascript const promise1 = new Promise((resolve, reject) => { setTimeout(() => resolve('Promise 1 resolved'), 1000); }); const promise2 = new Promise((resolve, reject) => { setTimeout(() => resolve('Promise 2 resolved'), 500); }); const promise3 = new Promise((resolve, reject) => { setTimeout(() => reject('Promise 3 rejected'), 200); }); Promise.race([promise1, promise2, promise3]) .then(result => { console.log(result); // "Promise 3 rejected" 또는 "Promise 2 resolved" }) .catch(error => { console.error(error); // "Promise 3 rejected" }); ``` 위의 예제에서 `promise1`, `promise2`, `promise3` 세 개의 Promise가 있습니다. `promise2`가 500ms 후에 해결되고, `promise3`은 200ms 후에 거부됩니다. `Promise.race()`는 가장 먼저 완료된 Promise의 결과를 반환하므로, 이 경우 "Promise 3 rejected"가 출력됩니다. 사용 사례 1. 타임아웃 처리 : 비동기 작업이 특정 시간 내에 완료되지 않으면 타임아웃을 발생시키는 경우에 유용합니다. ```javascript const fetchData = new Promise((resolve, reject) => { // 데이터 가져오기 로직 }); const timeout = new Promise((resolve, reject) => { setTimeout(() => reject('Request timed out'), 5000); }); Promise.race([fetchData, timeout]) .then(data => console.log(data)) .catch(error => console.error(error)); ``` 2. 여러 API 호출 : 여러 API 호출 중에서 가장 빠른 응답을 받아야 할 때 사용할 수 있습니다. ```javascript const apiCall1 = fetch('https://api.example.com/data1'); const apiCall2 = fetch('https://api.example.com/data2'); Promise.race([apiCall1, apiCall2]) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)); ``` 주의사항 - `Promise.race()`는 가장 먼저 완료된 Promise의 결과만 반환하므로, 나머지 Promise의 결과는 무시됩니다. 따라서 여러 Promise의 결과를 모두 처리해야 하는 경우에는 `Promise.all()`을 사용하는 것이 더 적합합니다. - Promise가 거부된 경우, `Promise.race()`는 즉시 거부된 Promise의 에러를 반환하므로, 에러 처리를 적절히 해주어야 합니다. 결론 `Promise.race()`는 비동기 프로그래밍에서 여러 Promise 중 가장 먼저 완료된 Promise의 결과를 얻고자 할 때 매우 유용한 메서드입니다. 이를 통해 타임아웃 처리, 여러 API 호출의 응답 처리 등 다양한 상황에서 효율적으로 비동기 작업을 관리할 수 있습니다.
작성자: 김예린 [비회원] | 작성일자: 1년 전 2024-09-12 16:03:44
조회수: 158 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.