ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] 3일차
    교육 2019. 8. 28. 00:19

    수업 내용 정리


    - Promise
    - async/await

     

     

    콜백 함수


    - 자바스크립트에서는 비동기 처리를 위해 콜백 함수 사용함 

    - 자바스크립트에서는 거의 대부분의 작업이 비동기로 동작함

    - 비동기 처리의 단점 실행 순서 파악이 어려움 (순서대로 처리되지 않을 수 있음)

    - 따라서, 코드 실행 순서가 뒤죽박죽 될 수 있는데, 이럴 경우 콜백 함수를 이용해서 해결함
    - 함수로부터 결괏값을 받지 않고, 결괏값을 이용해서 로직을 처리하는 콜백 함수를 넘김

     

     

    콜백 헬 


    - 비동기 처리를 위해 콜백 함수를 사용했더니, 콜백 헬이 등장

    콜백 함수를 중첩하다 보니 계속해서 들여 쓰기 해야 해서 코드 가독성이 떨어짐

    - 콜백 헬을 없애기 위해 Promise 등장

     

     

    Promise


    Promise는 바로 당장 결과를 얻진 못하지만, 가까운 미래에는 얻을 수 있는 결괏값에 접근하는 메서드를 제공 (then, catch)

    - 자바스크립트 비동기 처리에 사용되는 객체

    ES6에서 도입

    - 콜백 함수를 넘기는 대신에 Promise 객체를 생성해서 리턴하고, 호출부에서는 리턴 받은 Promise 객체의 then( ), catch( ) 메서드로 결과 값에 접근

    - 기존에 콜백 함수로 비동기 처리하던 방식과 가장 큰 차이점은 함수를 호출하면 Promise 타입의 결괏값이 리턴되고, 이 결괏값을 가지고 다음에 수행할 작업을 진행한다는 것

    -여러개의 비동기 작업들이 모두 완료됐을 때 작업을 진행하고 싶다면, Promise.all API를 활용

     

     

    Why사용


    콜백 헬을 없애기 위해 등장

     

     

    Promise의 3가지 상태


    - Pending (대기) : 비동기 처리가 완료 안된 상태 (new Promise( )를 호출할 때)
    - Fulfilled (이행) : 비동기 처리가 완료된 상태 (resolve( )를 호출할 때)
    - Rejected (실패) : 비동기 처리가 실패하거나 오류가 난 상태 (reject( )를 호출할 때)

     

     

    async/await


    ES7(ES2017)에서 async/await 키워드 추가

    - 동기 코드 처리 방식(함수 호출 후 결괏값을 변수에 할당하는 식으로)처럼 코드를 작성할 수 있음

    await 키워드는 Promise객체를 리턴하는 비동기 함수 앞에 사용 가능

    - await는 async 키워드가 붙어있는 함수 내에서만 사용 가능

    한 가지 주의할 점은 async 키워드가 붙어있는 함수를 호출하면 Promise 객체를 생성해서 리턴하지 않아도 Promise 객체가 리턴됨

    - 예외 처리는 try/catch

     

     

     

    참고


    https://joshua1988.github.io/web-development/javascript/promise-for-beginners/

     

    자바스크립트 Promise 쉽게 이해하기

    (중급) 자바스크립트 입문자를 위한 Promise 설명. 쉽게 알아보는 자바스크립트 Promise 개념, 사용법, 예제 코드. 예제로 알아보는 then(), catch() 활용법

    joshua1988.github.io

    https://www.daleseo.com/js-async-promise/

    '교육' 카테고리의 다른 글

    [Node.js] 10일차  (0) 2019.09.25
    [Node.js] 8일차  (2) 2019.09.18
    [Node.js] 4일차  (0) 2019.09.11
    [Node.js] 2일차  (0) 2019.08.23
    [Node.js] 1일차  (0) 2019.08.21

    댓글

Designed by Tistory.