Files
javascript-examples/doc/topics/Promise.md
2025-01-24 02:27:50 +09:00

94 lines
2.3 KiB
Markdown

# 프로미스
```javascript
let task1 = new Promise((resolve, reject) => {
try {
setTimeout(() => {
resolve({ message: "OK" });
}, 3000);
} catch (e) {
reject(e);
}
});
let i = 0;
const uid = setInterval(() => {
console.log(i);
i++;
}, 500);
task1.then((result) => {
console.log(result);
}).catch((reason) => {
console.error(reason);
}).finally(() => {
console.log("The End");
clearInterval(uid);
});
```
프로미스를 생성할 때에는 2 개의 콜백을 사용합니다. resolve는 작업이 성공했을 때 결과를 반환하고, reject는 작업이 실패했을 때 호출합니다.
비동기 작업이 성공하면 then이 호출되고 resolve에서 전달한 값을 받습니다. 실패한 경우에는 catch가 호출되고 reject에서 전달한 값을 받습니다. finally는 성공 또는 실패한 경우에 호출됩니다.
- Promise.resolve(val)
- Promise.reject(val)
```javascript
let task1 = Promise.resolve(100);
task1.then((result) => {
console.log(result);
});
let task2 = Promise.reject("BAD");
task2.catch((reason) => {
console.error(reason);
});
```
- Promise.all()
모든 프로미스가 완료된 이후에 결과가 배열로 전달됩니다.
- Promise.race()
처음으로 완료된 프로미스의 결과만 전달됩니다.
```javascript
let task1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3);
}, 3000);
});
let task2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2);
}, 2000);
});
let task3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
Promise.all([task1, task2, task3])
.then((result) => {
console.log(result); // [3, 2, 1]
});
Promise.race([task1, task2, task3])
.then((result) => {
console.log(result); // 1
});
```
## async / await
```javascript
async function myFunction(param) {
...
}
```
async 함수를 정의하기 위해 사용됩니다. async 함수에는 await식이 포함될 수 있습니다. await 문은 async 함수의 실행을 일시 중지하고 전달 된 Promise의 해결을 기다린 다음 async 함수의 실행을 다시 시작하고 완료후 값을 반환합니다. await 키워드는 async 함수에서만 유효하다는 것을 기억하십시오.