동기와 비동기의 차이점
- 동기적 실행:
- 코드가 위에서 아래로 순차적으로 실행 (하나의 작업이 끝난 후에 다음 작업 실행)
- `console.log()`와 같은 동기적인 함수는 호출 순서대로 즉시 실행
- 비동기적 실행:
- 비동기 함수는 즉시 실행을 시작하지만, 그 실행 결과가 완료될 때까지 기다리지 않고 다른 작업을 진행
- `setTimeout()`, `setInterval()`, `fetch()`, `setDoc()`와 같은 함수들은 백그라운드에서 실행되며, 결과를 기다리는 동안 다른 코드실행
- 비동기 함수가 `Promise`를 반환
- `Promise` : 비동기적으로 실행하는 작업의 결과(성공 or 실패)를 나타내는 객체
비동기 코드를 동기적으로 실행하는 방법
1. `promise` / `.then()` / `.catch()`
- `.then()`은 `Promise`가 완료된 후 호출될 콜백을 지정하는 방식으로, 코드가 여러 줄로 나누어져 가독성이 떨어질 수 있음
$("#addCommentBtn").click(function () {
let name = $('#name').val();
let content = $('#content').val();
let customId = Date.now().toString();
const docRef = doc(db, "Dotori", customId);
setDoc(docRef, {
id: customId,
name: name,
coment: content
}).then(() => {
// 문서 저장이 완료되면 페이지를 리로드
window.location.reload();
}).catch(error => {
console.error("문서 추가 중 오류 발생:", error);
});
});
2. `async` / `await`
- `async`
- 함수 앞에 async 키워드를 붙이면 해당 함수를 비동기 함수로 정의
- 이 함수는 항상 Promise를 반환하며, 비동기 작업을 처리하는 데 사용
- `await`
- `await`은 `async` 함수 내부에서만 사용할 수 있으며, `Promise`가 해결될 때까지 대기
- `await` 뒤에 오는 `Promise`가 완료되면, 그 결과 값을 반환
- 즉, 비동기 코드가 완료될 때까지 기다린 후에 다음 코드 실행
$("#addCommentBtn").click(async function () {
let name = $('#name').val();
let content = $('#content').val();
let customId = Date.now().toString();
const docRef = doc(db, "Dotori", customId);
await setDoc(docRef, {
id: customId,
name: name,
coment: content
});
window.location.reload();
})
'언어, 프레임워크 > JS' 카테고리의 다른 글
addDoc()과 setDoc() (0) | 2025.02.23 |
---|---|
[실습] Firebase로 데이터 삽입, 조회하기 (0) | 2025.01.24 |
Firestore Database (모듈 타입 스크립트 태그, addDoc(), getDocs()) (0) | 2025.01.23 |
fetch (get 방식과 post 방식) (0) | 2025.01.23 |
Javascript 기초 (1) | 2025.01.22 |