개발에 AtoZ까지

[ES6][JS] Javascript 동기/비동기 처리(setTimeout) 1탄 본문

프론트엔드/JAVASCRIPT

[ES6][JS] Javascript 동기/비동기 처리(setTimeout) 1탄

AtoZ 개발자 2021. 1. 30. 18:52
반응형

◆목표

동기/비동기 정의
비동기 처리 사용되는 곳
비동기 처리 사용법(SetTimeout)
비동기 처리의 문제점 및 해결방안

 


1. 동기 / 비동기 처리의 정의

- 동기적 처리

   요청을 보낸 후, 해당 요청의 응답이 올 때까지 다른 작업을 하지 못하는 방식

   즉, 코드 한줄 실행이 완료되어야지만 다음 줄 실행이 가능하다는 뜻

 

- 비동기적 처리

  요청을 보낸 후, 해당 요청의 응답과 상관없이 다른 작업을 하는 방식

  즉, 코드 한줄 실행 후 결과와 상관없이 다음 줄 실행한다는 뜻

 

2. 비동기 처리 사용되는 곳

- 보통 오래걸리는 기능들은 비동기적 방식으로 처리함

  • Rest API 요청
  • 파일/데이터베이스 처리
  • 타이머, 암호화/복호 화등

3. 비동기 처리 사용법(setTimeout)

1) setTimeOut()

     - 사용법: setTimeout( ms만큼 기다린 후 호출할 함수, ms(시간))

 

<input>

console.log(1);
setTimeout(() => {
  console.log(2);
}, 3000);
console.log(3);

<output>

1
3
2

4. 비동기 처리의 문제점 및 해결방안(Callback function)

1) 문제점

Rest API를 호출해서 DB에서 받은 값에 +1 연산을 처리해야 하는 경우,  DB에서 값을 받기도 전에 +1을 먼저 처리하는 문제점이 발생 

 

<1 출력 후 2가 출력되게끔 하고 싶은데 2가 출력되고 1이 출력됨>

function fun1() {
  setTimeout(() => {
    console.log("1");
  }, 1000);
}
function fun2() {
  console.log("2");
}

fun1();
fun2();

 

2) 해결방안

CallBack Function(콜백 함수)를 활용해 DB에서 값을 받아야지만 연산을 처리 할수있도록 설정한다

function fun1(callback) {
  setTimeout(() => {
    console.log("1");
    callback();
  }, 1000);
}
function fun2() {
  console.log("2");
}

fun1(fun2);

3) 콜백함수 사용 시 불편한 점

콜백 지옥을 초래할 수 있음(콜백 함수가 많이 생겨 코드의 가시성을 잃게 됨)

function fun1(callback) {
  setTimeout(() => {
    console.log("1");
    setTimeout(() => {
      console.log("2");
      setTimeout(() => {
        console.log("3");
        callback();
      }, 1000);
    }, 1000);
  }, 1000);
}
function fun2() {
  console.log("4");
}

fun1(fun2);

 

반응형
Comments