JavaScript

자바스크립트 비동기 처리

FE코크 2022. 2. 18. 13:48

안녕하세요 우아한테크코스 4기 프론트엔드에서 시원한 콜라를 제공하고있습니다.


 

자바스크립트에서 비동기 처리에 사용되는 callback함수, Promise, async/await에 대해 간단히 알아본다.

동기식(Synchronous)? 비동기식(Asynchronous)?

  • 동기식은 작업 실행의 순서가 정해져 있어 순서대로 실행되는것을 말한다
console.log('1')
console.log('2')
console.log('3')

/* 출력
1
2
3
*/
  • 비동기식은 작업 실행의 순서에 상관없이 다음 순서의 작업이 실행되는것을 말한다.
console.log('1')

setTimeout(()=>{
	console.log('2')
},1000)

console.log('3')

/* 출력
1
3
2
*/

자바스크립트 비동기 처리

자바스크립트는 크게 3가지의 비동기 처리 방식을 가지고 있다.

  • callback 함수
  • Promise
  • Promise를 활용한 async/await

다음 예시를 보고 각 사용방식을 알아본다.

1. Callback 함수사용

  • callback 함수 미사용
const printAnimal = (animal) => {
	console.log(animal);
}

const callPrint = () => {
	let animal = 'dog';
	
	console.log(animal);

	setTimeout(() => {
		animal = 'cat';
	},1000);

	return animal;
}

printAnimal(callPrint());

/* 출력
dog
dog
*/
  • callback 함수 사용
const printAnimal = (animal) => {
	console.log(animal);
}

const callPrint = (callback) => {
	let animal = 'dog';
	
	console.log(animal);

	setTimeout(() => {
		animal = 'cat';
		callback(animal)
	},1000);

}

callPrint(printAnimal)

/* 출력
dog
(...1초 후)
cat
*/

2. Promise

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('cat');
  }, 1000);
});

const printAnimal = () => {
  const animal = 'dog';

  console.log(animal);

  promise.then(newAnimal => {
    console.log(newAnimal);
  });
};

printAnimal();

/* 출력
dog
(...1초 후)
cat
*/

3. async/await

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('cat');
  }, 1000);
});

const printAnimal = async() => {
  let animal = 'dog';

  console.log(animal);

	animal = await promise;
	console.log(animal);
};

printAnimal();

/* 출력
dog
(...1초 후)
cat
*/