94 lines
2.3 KiB
Markdown
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 함수에서만 유효하다는 것을 기억하십시오. |