1 minute read

  • 콜백

    • 비동기 작업

      • JS 호스트 환경에서 제공하는 여러 함수 사용 시 비동기 동작 스케쥴링 가능

      • 외부 스크립트의 코드 바로 호출 시 비동기 작업인 스크립트 불러오기가 비동기적으로 실행되기 떄문에 기다리지 않고 바로 실행돼 오류 발생

    • 콜백 함수

      • 새롭게 불러오는 스크립트에 있는 함수를 콜백 함수 안에서 호출함으로써 외부 스크립트 안의 함수 사용

      • 콜백 함수의 인수로 전달된 함수(대게 익명 함수)는 원하는 동작(비동기 작업)이 완료 된 후 실행됨

      • ‘오류 우선 콜백’

        • 콜백 함수 인자에 에러 추가해서 스크립트 로딩 성공/실패에 따른 처리 방법 패턴
    • 콜백 지옥(멸망의 피라미드)

      • 콜백 중첩이 길어지는 패턴
  • 프라미스

    • 프라미스

      • ‘제작 코드’ 와 ‘소비 코드’ 연결해 주는 특별한 JS 객체

      • new 생성자로 만들어지며 resolve, reject, excutor로 이루어짐

      • 콜백과의 비교

        • 프라미스

          • 흐름이 자연스러우며 결과에 따라 그 다음에 무엇을 할 지에 대한 코드 작성

          • 원하는 만큼 .then 호출 가능

        • 콜백

          • 함께 호출할 함수 준비되어야 함

          • 핸들러 하나만 가능

      • excutor

        • 프라미스가 만들어질 떄 자동으로 실행되며 결과 최종적으로 만들어 내는 제적 코드를 포함함

        • 인수에 콜백(resolve, reject)넘길 시 하나는 반드시 호출해야 함

      • resolve, reject

        • JS가 자체적으로 제공하는 콜백

        • 즉시 호출 가능

        • resolve(value)

          • 일이 성공적으로 끝난 경우 그 결과를 나타내는 value와 함께 호출 됨
        • reject(error)

          • 에러 발생 시 에러 객체를 나타내는 error와 함께 호출

          • 에러 객체와 함께 사용하는 것 추런

      • promise 객체

        • 프라미스 생성자가 반환하는 객체

        • state, result 프로퍼티 가짐

        • 성공/실패 시 한번 변경되며 다시 변경할 수 없음

        • state

          • 내부 상태를 나타내는 프로퍼티

          • 처음엔 “pending”

          • resolve/reject 호출 시 “fullfilled”/”rejected” 로 변함

        • result

          • 결과를 나타내는 프로퍼티

          • 처음엔 “undefined”

          • resolve/reject 호출 시 exruter 내부의 resolve/reject의 인수값으로 변함

    • then, catch, finally

      • promise 객체에 접근하여 구독하고 상황에 맞는 처리하는 핸들러

      • 처리된 프라미스의 핸들러는 즉각 실행됨

      • then

        • 첫번째/두번째 인수는 프라미스가 이행/거부 됐을 때 (resolve/reject)됐을 떄 해당 값 인수로 받아서 실행 결과 받음

        • 작업이 성공적으로 처리된 경우만 다루고 싶을 시 인수 하나만 전달하면 됨

      • catch

        • 에러가 발생한 경우만 다룰 때 사용

        • then(null,f()) 와 같음

      • finally

        • 인수 없음

        • 절차를 마무리 하는 ‘보편적’ 작업 수행

        • 프라미스 이행/거부 여부 알 수 없음

        • 자동으로 다음 핸들러에 결과와 에러 전달

        • 결과를 처리하기 위해 만들어진 용도가 아님