javascript 고급

@ 2022년 01월 22일

자바스크립트 Promise

  • pythontutor.com/javascript.html
  • setTimeout - 비동기통신에서 중요한?
  • typescript를 해석하기위한 swc
  • add -D types - 로 설치
  • 리액트는 따로 설치할 필요없음

  • 프로미스 객체를 본다. 프로미스 동작보기,
  • Async, Away가 promise와 연동되어 어떻게 동작하는지
  • Promise()

  • developer.mozilla.org/ko/docs/web/javascript/reference/global_object
  • 대기, 이행, 거부

동기 비동기

  • 비동기 Asynchtonous
    • 산발적으로 수행되기 때문에 특점 지점을 알수가 없다.
  • 동기 synchronous : 같이 동시적으로 실행된다 : run-to-completion
    • 모든 내용을 순차적으로 시작하기 때문에 어떤 시점에 대한 이벤트를 잡기가 쉬워짐
  • 작업의 시작은 알 수 있으나 작업의 끝은 알 수 없다.
  • 코어(물리적 연산 분리), 스레드(논리적 연산 분리)
  • Task(프론트엔드 단에서의 스레드같은 개념)

  • 프론트 엔드에서의 무거운작업 수행시 UI가 굳는 현상을 방지하기 뒤한 방법. Ajax(화면을 새로고침하지 않고 부분적으로 처리)
  • worker를 이용하여 스레드를 사용할수 있지만 사용하고 있지 않다.

  • setTimeout이나 promise 같은 비동기 코드들

  • macrotask(중요한), microtack(덜 중요한)
  • callback - 이전까지 비동기를 처리하던 방식?
  const asuncFunc = async () -> {
    await delay(100);
    return "hello";
  }
  
  const delay = ( t = 0 ) -> {
    return new Promise(resolve -> {
      setTimeout(() -> {
        resolve(t);
      }, t);
    });
  };
  • async가 붙으면 무조건 promise 리턴 타입이 된다.
  async function hello() { return "Hello" };
  hello();

제너레이터

  function* f(){
    let i = 0;
    while(true){
      yield i++;
    }
  }
  • f.next();로 수행요청을 할수 있나봄
 고차함수 
  function f2(){
    let i =0;
    return i;
  }
  • 고차함수(컨티뉴에이션 모나드) <- 제너레이터 <- async-await
  • 이렇게 의존성이 있어요

Javascript macrotask

  • setTimeout(); setInterval();

Javascript microtask

  • promise();
  • Event Loop가 받아서 순차로 처리함

  • 옵셔널 체이닝 : func?. (); : 없을 경우에는 함수를 수행하지 않음

콜백체인

  • new Promise((resolve, reject) –> { })
  • then, finally, catch
  print("hello")
  .then(() -> print("world"))
  .then(() -> print("foo"))
  .catch()
  .finally();

  try{
  }catch(e){
  }finally{
  }

Trailing comma

  • https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Trailing_commas
  • Trailing comma라고 해서 기능입니다 문제 안 되어용
  • Trailing comma 시 공란이라면 for문이 하나 덜 돌거나 length가 하나 적게 표시되거나 그러는건가? 신기하네

Promise

  • Promise.all : 배열로 promise를 받아서 모든 promise를 수행했다가 .then 체인을 수행함
    • 리턴값 배열
  • Promise.race : 선착순
    • 리턴값 단독
  • Promise 체인닝의 리턴값은 Promise로 돌아온다. await으로 Promise 리턴을 받아서 이어나간다.

  • https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Async_await
  • async를 사용하면 아무거나 return해도 promise로 감싸져서 되돌아간다.

새로운 기능

  • console.time(“test”);
  • console.timelog(“time”,”say test”);
  • console.timeEnd(“test”);

  • process.exit(); 프로세스 종료

람다식

  • 람다식 예제

  • 기존 자바 문법

  new Thread(new Runnable() {
     @Override
     public void run() { 
        System.out.println("Welcome Heejin blog"); 
     }
  }).start();
  • 람다식 문법
  new Thread(()->{
        System.out.println("Welcome Heejin blog");
  }).start();