일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react
- webpack
- 가상 dom
- 프로미스
- props와 state 차이점
- 서버 사이드 렌더링
- 스코프 체인
- 브라우저 렌더링원리
- polyfill
- 리액트의 생명 주기
- CSS
- 변수 생성 단계
- 자바스크립트
- 자바스크립트의 클래스
- async/await
- CORS
- 클라이언트 사이드 렌더링
- 호이스팅
- 이벤트 캡처링
- 이벤트 버블링
- 주소창에 naver 입력시 일어나는 일
- 세션 스토리지
- MPA
- undeclared
- 깊은 복사
- 실행 컨텍스트
- 리액트
- 로컬 스토리지
- 자바스크립트 함수
- 얕은 복사
Archives
- Today
- Total
Gapus Dev Blog
[자바스크립트] 비동기 처리(콜백, 프로미스 , anync/await) 본문
비동기 처리
- 특정 작업이 완료되기를 기다리지 않고 다음 작업을 수행하는 것
- 여러 작업을 동시에 처리하거나 시간이 오래 걸리는 작업을 효율적으로 가능
비동기 처리 구현 방식
- 콜백(callback) 함수
- 비동기 작업이 완료됬을때 호출되는 함수로, 작업이 완료되면 함수가 실행
- 비동기 작업의 결과를 처리 가능
- 콜백 함수를 중첩해서 사용하면 코드의 가독성과 유지 보수성이 떨어질 수 있다.
- 예시
function fetchData(callback) {
setTimeout(function() {
const data = "비동기 데이터";
callback(data);
}, 2000);
}
function processData(data) {
console.log("데이터 처리: " + data);
}
fetchData(processData);
1. fetchData 함수는 2초 후에 "비동기 데이터"를 콜백 함수 processData에 전달
2. processData 함수는 전달받은 데이터를 처리하고 출력.
- 프로미스(Promise)
- 비동기 작업의 최종 결과를 나타내는 객체
- 작업이 성공적을 완료되면 resolve 콜백을 호출하고, 실패하면 reject 콜백을 호출
- 프로미스를 사용하면 비동기 코드를 구조화하고 중첩 콜백을 피할 수 있다.
- 예시
function fetchData() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
const data = "비동기 데이터";
resolve(data);
}, 2000);
});
}
fetchData()
.then(function(data) {
console.log("데이터 처리: " + data);
})
.catch(function(error) {
console.error("에러 발생: " + error);
});
1. fetchData 함수는 2초 후에 "비동기 데이터"를 resolve하는 프로미스를 반환
2. then을 통해 데이터를 처리하고 .catch를 통해 에러를 처리
- async/await
- ES6부터 도입된 문법
- 비동기 코드를 동기적으로 작성할 수 있게 해준다.
- async 함수 내에서 await 키워드를 사용하면 프로미스가 처리될 때까지 대기 후 결과를 반환
- 일반 함수에는 await 사용 불가
- 비동기 코드를 간결하고 직관적으로 작성 가능
- 예시
function fetchData() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
const data = "비동기 데이터";
resolve(data);
}, 2000);
});
}
async function processData() {
try {
const data = await fetchData();
console.log("데이터 처리: " + data);
} catch (error) {
console.error("에러 발생: " + error);
}
}
processData();
1. fetchData 함수는 2초 후에 "비동기 데이터"를 resolve하는 프로미스를 반환
2. processData 함수는 await 키워드를 사용하여
fetchData 함수의 결과를 비동기적으로 대기 후 데이터를 처리하고 출력
3. try-catch 문을 사용하여 에러를 처리
비동기 처리의 활용
- 서버로 데이터를 가져와야 할 때, 비동기 처리를 하면 데이터를 가져오는 동안
페이지는 멈추지 않고 다른 작업을 수행할 수 있다. - 데이터 요청, 파일 로드, 애니메이션 등 활용
'프론트엔드 > JavaScript' 카테고리의 다른 글
[자바스크립트] SSR (0) | 2023.11.01 |
---|---|
[자바스크립트] CSR (1) | 2023.10.31 |
[자바스크립트] 실행 컨텍스트 (1) | 2023.10.29 |
[자바스크립트] 클로저 (0) | 2023.10.28 |
[자바스크립트] null, undefined, undeclared, NaN (0) | 2023.10.22 |