JavaScript Promises Explained: 초보자를 위한 스타트업 비유
I’m happy to translate the article for you, but I’ll need the actual text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have the article text, I’ll translate it into Korean while preserving the original formatting, markdown, and any code blocks or URLs.
Promise란 무엇인가
Promise는 JavaScript에서 비동기 작업이 성공했는지 실패했는지를 나타내는 비동기 연산입니다.
스타트업 기능을 개발하는 것에 비유하면, 지금 작업을 시작하지만 결과(성공 또는 실패)는 나중에 나오게 됩니다.
비동기 연산 – 백그라운드에서 실행되며, 작업이 끝날 때까지 기다리지 않고 다른 코드를 계속 실행할 수 있는 작업입니다.
왜 우리는 프로미스가 필요한가
- 비동기 작업을 올바르게 처리하기 위해
- 성공 또는 실패를 명확히 관리하기 위해
- 더 깔끔하고 가독성 높은 코드를 작성하기 위해
- 코드를 더 구조화하기 위해
- API 및 백그라운드 작업을 효율적으로 다루기 위해
Promise의 상태
가능한 세 가지 상태가 있습니다:
- Pending – 기본 상태; 작업이 시작되었지만 결과가 아직 알려지지 않았습니다.
- Resolved – 프라미스가 성공적으로 완료되어 결과를 반환합니다.
- Rejected – 프라미스가 실패하고 오류를 반환합니다. 예를 들어 계획대로 진행되지 않을 때와 같습니다.
프라미스 생성 및 처리
프라미스 생성
프라미스를 만드는 것은 새로운 프로젝트를 시작하는 것과 같습니다: 무언가를 만들기로 결정했지만 결과는 아직 알 수 없습니다.
const promise = new Promise((resolve, reject) => {
// asynchronous work here
});
프라미스 처리
프로젝트를 시작한 뒤 결과를 기다립니다: 성공하면 축하하고, 실패하면 수정합니다. JavaScript에서 프라미스는 .then(), .catch(), 그리고 .finally() 로 처리합니다:
const promise = new Promise((resolve, reject) => {
// Example: resolve or reject immediately
resolve("Promise Resolved");
// reject("Promise Rejected");
});
promise
.then((data) => {
console.log(data); // runs on resolve
})
.catch((error) => {
console.log(error); // runs on reject
})
.finally(() => {
console.log("code ends"); // always runs
});
.then()은 프라미스가 resolve될 때 실행됩니다..catch()는 프라미스가 reject될 때 실행됩니다..finally()는 결과와 상관없이 실행됩니다.
Promise 메서드
이 정적 메서드들은 Promise 클래스에서 직접 호출됩니다.
Promise.resolve()
이미 해결된 프라미스를 반환합니다.
Analogy: a client instantly approves your proposal.
비유: 클라이언트가 즉시 제안을 승인합니다.
const resolved = Promise.resolve("Already resolved");
Promise.reject()
오류와 함께 이미 거부된 프라미스를 반환합니다.
Analogy: a manager instantly rejects your leave request.
비유: 관리자가 즉시 휴가 요청을 거부합니다.
const rejected = Promise.reject(new Error("Already rejected"));
Promise.any()
프라미스 배열을 받아 첫 번째 이행된 프라미스로 해결합니다. 모든 프라미스가 거부되면 전체가 거부됩니다.
Analogy: pitching to multiple investors; you need just one “yes”.
비유: 여러 투자자에게 피치를 하듯, “예” 하나만 있으면 됩니다.
Promise.any([p1, p2, p3])
.then((value) => console.log("First fulfilled:", value))
.catch((err) => console.log("All rejected:", err));
Promise.all()
모든 프라미스가 이행될 때까지 기다립니다; 하나라도 거부되면 전체가 거부됩니다.
Analogy: all departments must finish their work before launch.
비유: 모든 부서가 작업을 마쳐야 출시할 수 있습니다.
Promise.all([p1, p2, p3])
.then((values) => console.log("All fulfilled:", values))
.catch((err) => console.log("One failed:", err));
Promise.allSettled()
모든 프라미스가 정착(이행 또는 거부)될 때까지 기다리고, 각 결과를 설명하는 배열을 반환합니다.
Analogy: you get a full report from every department, regardless of success.
비유: 성공 여부와 관계없이 모든 부서의 전체 보고서를 받습니다.
Promise.allSettled([p1, p2, p3])
.then((results) => console.log(results));
Promise.race()
입력된 프라미스 중 어느 하나가 정착되는 즉시 정착되는 프라미스를 반환합니다(이행이든 거부이든 상관없음).
Analogy: the first investor to respond decides your direction.
비유: 가장 먼저 응답한 투자자가 당신의 방향을 결정합니다.
Promise.race([p1, p2, p3])
.then((value) => console.log("First settled:", value))
.catch((err) => console.log("First rejected:", err));
Conclusion
JavaScript 프라미스는 즉시 완료되지 않는 작업을 처리하는 구조화된 방법을 제공합니다. 프라미스를 생성하고 .then(), .catch(), .finally() 로 처리하며 Promise.all(), Promise.any() 등과 같은 정적 메서드를 사용할 때, 프라미스는 비동기 코드를 더 깔끔하고 읽기 쉬우며 관리하기 쉽게 만들어 줍니다.