Promise란 📖
Promise는 비동기 작업의 결과에 대한 상태를 나타내는 객체입니다.
아래 예시에서 new 연산자로 Promise의 인자로 넘어가는 콜백은 바로 실행됩니다. 내부에서 비동기 작업이 완료될 때 `resolve()`를 호출합니다.
new Promise(function (resolve) {
setTimeout(function () {
var name = '에스프레소';
console.log(name);
resolve(name);
}, 500);
})
Promise 상태
`대기(Pending)` : 비동기 함수가 아직 시작하지 않은 상태
`성공(Fulfilled)` : 비동기 함수가 성공적으로 완료된 상태
`실패(Rejected)` : 비동기 함수가 실패한 상태
Promise가 대기 상태에서 상태가 바뀌면 `then()`,`catch()` 메서드를 사용해 성공, 실패 상태의 Promise를 각각 처리할 수 있습니다.
// requestBuy가 Promise를 반환한다고 가정
func.requestBuy({
orderId: "t9JI0Bs1SVdJxRs8yjiQJ",
orderName: "티셔츠",
})
.then(function (data) {
console.log(data);
// 성공 처리
})
.catch(function (error) {
console.log(error.message);
// 에러 처리
})
하지만 Promise에도 콜백 함수와 비슷한 문제가 생길 수 있습니다. `then()` 메서드의 체인을 길게 이어나가면 콜백 체인과 마찬가지로 유지보수와 가독성이 떨어지고 에러를 찾기가 힘들어집니다.
❗여기서 `async`와`await`로 콜백, Promise 체인의 단점을 보완할 수 있습니다.
async, await 📖
ES7에 추가된 비동기 처리 방식 중 하나입니다.`async`와`await`를 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있어 가독성이 좋아지고 에러 처리가 간단해집니다.
사용 방법
비동기 작업을 수행하고자 하는 함수 앞에 `async` 키워드를 붙이고 함수 내부에서 비동기 작업이 필요한 위치에 `await` 키워드를 붙여주면 됩니다.
async function getData() {
try{
const response = await fetch('/api');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
}
}
`async` 함수 getData()를 정의하고 `await`를 사용해 fetch() 메서드를 기다리고 데이터를 반환하는 코드입니다.
❗`await` 키워드는 Promise 객체가 완료될 때까지 기다리고 에러가 발생하면 catch문으로 제어가 넘어가기 때문에 try-catch문 안에서 에러를 핸들링할 수 있습니다!
요약 📖
- Promise는 비동기 작업 결과에 대한 상태를 반환하는 객체
- then(), catch() 메서드로 성공, 실패 상태의 Promise를 처리할 수 있다.
- 콜백지옥의 단점을 보완하기 위해 async, await 키워드를 사용할 수 있다.
- 비동기를 수행하는 함수 앞에 async 키워드를 붙이고 비동기 작업이 필요한 위치에 await 키워드를 사용하면 비동기 코드를 동기 코드처럼 보이게 할 수 있다.
안뇽~!😄
출처 🏷️
https://docs.tosspayments.com/blog/async-await-example
'공부 > javascript' 카테고리의 다른 글
폴리필이란? (1) | 2024.12.12 |
---|---|
javascript 심화 7 (클로저) (0) | 2024.08.07 |
javascript 심화 6 (이벤트 루프) (0) | 2024.08.02 |
javascript 심화 4 (콜백함수) (0) | 2024.07.29 |
javascript 심화 3 (this, 화살표함수, call, apply, bind) (0) | 2024.07.26 |
javascript 심화 2 (호이스팅, var let const 차이점, TDZ) (5) | 2024.07.24 |
javascript 심화 1 (실행 컨텍스트) (0) | 2024.07.24 |
javascript 기본 4 (불변 객체, 얕은 복사, 깊은 복사) (0) | 2024.07.23 |