axios.get은 프로미스를 리턴하고 await를 앞에 붙여주면
일반적인 프로미스에서 .then을 한 것과 같이
요청이 끝날 때까지 기다렸다가 결과 값을 리턴한다.
만약 try 문 안의 서버 요청 과정에서 상태 코드가 200이 아닌 에러가 발생했을 경우 catch로 넘어가게 되는데
catch가 받는 ex 객체에는 request와 response가 있고
이를 이용해서 어떤 경우의 오류인지를 파악해
각 오류에 대한 대처를 할 수 있다.
try {
const response = await axios.get("https://jsonplaceholder.typicodef.com/posts");
} catch (ex) {
// ex.request 서버에 성공적으로 요청했을 때 설정됨
// ex.response 서버에 성공적으로 응답을 받았을 때 설정됨
}
ex.request는 undefined로 되어 있다가 서버에 성공적으로 요청을 했을 때 설정된다.
request가 undefined라면 클라이언트에서 서버에 요청을 보내기도 전에 어떤 에러가 발생했다는 것을 알 수 있다.
ex.response는 undefined로 되어 있다가 서버에 성공적으로 응답을 받았을 때 설정된다.
response가 undefined라면 서버 응답을 받을 수 없는 어떤 에러가 발생했다는 것을 알 수 있다.
이를 이용해서 catch 문 안에 다음과 같이 expected 에러와 unexpected 에러를 나눠서 처리 해줄 수 있다.
try {
await axios.delete(생략);
} catch (ex) {
if (ex.response && ex.response.status === 404) {
// 404 에러가 발생한 경우
console.log('이미 지워진 글입니다.');
} else {
// unexpected 에러가 발생한 경우
console.log('글을 지우는 과정에서 예상치 못한 에러가 발생했습니다.');
}
}
expected errors : 클라이언트 에러, 400대 코드
unexpected errors : 네트워크 다운, 서버 다운, 데이터베이스 다운, 버그
Interceptors
다음의 interceptors를 활용하면
request나 response가 성공하거나 실패할 때마다 호출되는 함수를 쓸 수 있다.
에러 처리의 중복을 줄여주는 용도로 사용한다.
axios.interceptors.response.use(success, error);
// success는 성공했을 때 호출되는 함수
// error는 에러가 생겼을 때 호출되는 함수
axios.interceptors.response.use(success, error => {
// error.response.status를 가져올 수 있다.
});
'자바스크립트 > 비동기' 카테고리의 다른 글
promise를 동기적인 모양으로 처리하는 async와 await (0) | 2020.07.04 |
---|---|
Promise.all (0) | 2020.07.04 |
자바스크립트의 try, catch (0) | 2020.04.30 |
async 함수와 await에 관한 팁 (0) | 2020.04.29 |
Promise 이해하기 (0) | 2020.04.28 |