원래는 재귀를 할 생각이었으나..
이번에 서버를 공부하면서 Axios, async/await에 대해 알아두면 좋겠다는 생각이 들어서 주제를 변경했다 😇
const axios = require('axios')
axios.get('http://localhost:4000')
// 응답(성공)
.then((res) => {
console.log(res)
})
// 응답(실패)
.catch((err) => {
console.log(err)
})
// 응답 ( 항상실행 )
.then((res) => {
// ...
})
서버로부터 데이터를 받아옴
서버로 데이터를 전송하여 자원을 생성
const axios_post = () => {
const data = {
name : 'name',
age : 23
}
axios.post("http://localhost:8000", data)
.then((res)=> {
console.log(res)
})
.catch((err) => {
console.log(err)
})
}
서버에 존재하는 Database 자원을 수정
서버에 존재하는 Database 자원을 삭제
const axios_delete = () => {
axios.delete("http://localhost:8000",
{
data: {
postId:...
commentId: ...
}
});
}
await 키워드는 async 함수 안에서만 사용할 수 있다
함수 안에서 await를 만나게 되면 Promise가 처리될 때까지 대기
await를 이용하게 된다면 콜백함수 처리 없이 비동기 처리를 해줄 수 있음
axios를 이용하여 API 호출을 하는 경우 바로 응답이 오지 않기에, 일반적으로 비동기 방식을 사용
axios 문서에도 기본적으로 사용하는 방식은 Promise-then 방식의 비동기 호출 방식을 소개하고 있음
다만 then 방식의 경우도 api호출이 복잡해지면 then을 then 내부에서건 또는 chain 형태로 연달아 쓰는 경우가 발생
➡️ 아래 예시로 비교해보자
//then 을 연속적으로 호출하는 예시
const TestApiCall = () => {
axios.get('http://localhost:3000')
.then((res) => {
const data = res.data;
const userId = data.userId;
axios.get('http://localhost:3000' + userId)
.then((res) => {
console.log("response :", res.data)
})
.catch((err) => {
console.log(err)
})
})
.catch((errer) => {
console.log("ERROR :", err);
})
}
한눈에 봐도 복잡해보인다..
js에서도 async/await를 이용한 비동기 구문이 추가 되었기에 axios도 이를 지원하고 있음
아래는 async/await를 사용한 예시이다.
➡️ try-catch 방식을 이용함
const TestApiCall = async() {
try {
const response = await axios.get('https://localhost:4000')
const userId = response.data.useerId;
const response2 = await axios.get('http://localhost:3000')
console.log("response :", response2.data)
} catch(err) {
console.log("err :", err);
}
}
이전 then 방식보다 훨씬 깔끔해진 모습을 볼 수 있음 !