# 프로미스 ```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 함수에서만 유효하다는 것을 기억하십시오.