~ 30일차 ~
동기 동작
: 함수나 일정한 코드가 순서대로 실행-완료, 실행-완료되는 것
비동기 동작
: 함수나 일정한 코드가 실행 순서와 상관없이 완료되는 것을 말합니다
비동기에서 발생하는 에러를 해결하기 위해, 콜백 함수 (Callback Function)를 사용
콜백 함수 : 함수 안에서 실행되는 함수
가독성이 떨어진다.
에러 처리 시 각각 에러 핸들링이 필요하다.
.then()
을 붙여서 해당 promise 내부의 비동기 동작이 완료된 결과를 받아와 특정한 코드를 실행할 수 있음function fetchData() {
return new Promise((resolve, reject) => {
// const success = true; -> 임의로 값 지정하여 테스트
if (success) {
resolve('성공');
} else {
reject('실패');
}
})
};
* promise 객체
- state : 제작 코드의 처리 상태 (기본값 : pending)
- result : 제작 코드의 결과 값 (기본값 : undefined)
resolve(value) 실행
- state : fulfilled
- result : value
reject(error) 실행
- state : rejected
- result : error
then
: resolve, reject 에 따른 결과 모두 처리 가능catch
: reject 에 따른 결과 처리then(null, 함수)
과 완전히 동일,catch
finally
: resolve, reject 여부에 상관없이, 프로미스 내부 코드가 완료되면 항상 실행fetchData()
.then(function(result) { //resolve의 값
console.log(result);
})
.catch(function(error) { //reject의 값
console.log(error);
})
.finally (() => { //이행,거부 모두 마지막에 실행
console.log('done');
});
async
: 프로미스 반환await
: 프로미스 처리까지 기다리기await
는 async
내부 함수에서만 사용 가능try... catch
구문을 async/await
구조에서 사용 가능fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response1 => response1.json())
.then(json => console.log(json))
.then(() => fetch('https://jsonplaceholder.typicode.com/todos/2'))
.then(response2 => response2.json())
.then(json => console.log(json))
.catch(err => console.log(err))
.finally(() => console.log('--- DONE ---'));
// ---------- try catch 사용 ---------- //
async function makeRequest() {
try {
const response1 = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const jsonResponse1 = await response1.json();
console.log('jsonResponse1', jsonResponse1);
const response2 = await fetch('https://jsonplaceholder.typicode.com/todos/2');
const jsonResponse2 = await response2.json();
console.log('jsonResponse2', jsonResponse2);
} catch (error) {
console.log(error)
} finally {
console.log('--- DONE ---')
}
}
makeRequest(); //함수 실행해줘야 함
공감하며 읽었습니다. 좋은 글 감사드립니다.