ex) A 종료 -> B 시작
ex) A -> B 순서의 작업이 있다면 A를 종료하기 전에 B를 실행할 수 있다.
Ajax(Asynchronous Javascript and XML)
라고 한다.HTTP 요청
(GET, POST ...), 이벤트 핸들러
(click, over ...), setTimeout
, setInterval
이 있다.에러처리 불가
, 가독성 hell
then(성공)
, catch(에러)
, finally(무조건)
가 있다.비동기 통신의 핵심은 promise를 이해하는 것이다.
promise는 비동기 통신의 상태와 처리 결과를 관리하는 객체이다.
pending 상태인 promise의 비동기 통신이 성공하면 resolve 함수가 호출되고, fulfilled 상태가 된다.
promise의 비동기 통신이 실패하면 reject 함수가 호출되고, rejected 상태가 된다.
상태(state) | 설명 |
---|---|
Pending | 대기중일 때 |
Fulfilled | 비동기 처리가 성공했을 때 |
Rejected | 비동기 처리가 실패했을 때 |
비동기 처리 결과 | 설명 |
---|---|
value | 성공시 |
error | 실패시 |
메서드 | 설명 |
---|---|
then | 성공시 호출 |
catch | 에러시 호출 |
finally | 성공, 에러 여부 상관없이 호출 |
이 promise를 더 간단히 이해하기 위해서는, Provider / Consumer 관점에서 봐야한다.
content를 수정하기 위해 patchContent api를 만든다.
// PATCH /todo/:id
const patchContent = (obj: ContentObj): Promise<UpdateContentResponse> => {
return new Promise((resolve, reject) => {
if (obj.url && obj.content)
return resolve({
status: 200,
msg: "포스트가 수정되었습니다.",
content: obj.content,
id: obj.id,
});
else return reject(new Error("url, content가 있는지 확인해주세요."));
});
};
이 api를 사용할 때는, 후속처리 메서드 then
을 이용하여 데이터를 저장하고, catch
를 이용해서 에러를 처리한다.
patchContent(obj)
.then(response => setResult(response))
.catch(err => setError(err));
// 실제 promise의 결과는 보통 data안에 들어온다. (response.data)