1. 동기(Sync)&비동기(Async), Promise, 비동기 함수(Async Function)
Node.js 입문 강의 내용 중 개념 정리
동기(Sync)
비동기(Async)
차단 모델(Blocking Model)
비차단 모델(Non-Blocking Model)
Javascript는 Async + Non-Blocking Model을 채용하여 현재 실행중인 코드의 실행이 끝나지 않아도 다음 코드를 호출
Javascript에서 비동기 처리를 동기로 처리할 수 있게 돕는 객체
Promise의 상태
Promise 구문
new Promise(executor)
new
키워드를 사용하여 Promise 객체 생성
Promise의 실행 함수라고 불리는 executor
는 Promise가 만들어지는 즉시 자동으로 호출된다.
executor
는 resolve
와 reject
라는 두 개의 콜백 함수를 받는다.
resolve
reject
- Promise가 실패했을 때 호출되는 함수
- 이 함수를 호출하면 Promise는 거부(Rejected) 상태가 된다.
- 이 값은 Promise가 거부될 때 catch() 메서드로 전달된다.
const promise = new Promise((resolve, reject) => {
// 비동기 작업 수행
if (/* 성공 조건 */) {
resolve("작업 성공!");
} else {
reject("작업 실패!");
}
});
promise.then((result) => {
console.log("작업 성공:", result);
}).catch((error) => {
console.error("작업 실패:", error);
});
then() 메서드
catch() 메서드
=> promise 객체가 이행되면 then() 메서드에 전달된 콜백 함수가 호출되어 "작업 성공!"이라는 결과를 출력하고, 거부되면 catch() 메서드에 전달된 콜백 함수가 호출되어 "작업 실패!"라는 에러를 출력
Promise를 사용하는 경우
JavaScript에서 비동기 작업을 처리하는 데 사용되는 기능
특징
resolve
된다.await
연산자를 사용할 수 있다. await 연산자
function resolveAfter2Seconds() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
const result = await resolveAfter2Seconds();
console.log(result);
// Expected output: "resolved"
}
asyncCall();
Promise
와 'resolved' 반환function fetchData() {
return fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error('데이터를 가져오는 데 실패했습니다.');
}
return response.json();
})
.then(data => {
console.log('데이터를 성공적으로 가져왔습니다:', data);
})
.catch(error => {
console.error('에러 발생:', error);
});
}
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('데이터를 가져오는 데 실패했습니다.');
}
const data = await response.json();
console.log('데이터를 성공적으로 가져왔습니다:', data);
} catch (error) {
console.error('에러 발생:', error);
}
}