NATIVE

settings_applicationsObject

NATIVE

Editing
  • account_tree
  • bug_report

ObjectAsyncFunction

비동기 함수(async function)를 생성하는 객체이다. 드러나지 않는 은닉된 객체이며 전역 객체가 아니다.

설명

비동기 함수는 다른 작업 프로세스와 독립적으로 실행하며 일반적으로 함수의 실행 완료가 현재 서비스에 즉각적인 영향을 주지 않을 경우에 사용할 수 있다. 간단히 정리 한다면 함수를 호출하고 결과를 기다리는 동안 다른 작업을 수행할 수 있다. 따라서 비동기 함수는 현재 서비스의 핵심이 절차에 따라 결과를 산출해 가는 과정의 작업일 경우에는 사용하기는 어렵다. 즉 동기적인 작업과 비동기적인 작업이 구분되어 처리 프로세스를 구현해야 한다.

AsyncFunction 객체는 비동기 함수의 유형을 나타낸다. 이와 반대 개념의 함수 유형은 동기(synchronization) 함수일 것이다. 동기 함수는 알다시피 선언식, 표현식 그리고 Function 객체의 생성자를 사용해서 구현할 수 있다. 비동기 함수도 함수를 생성하는 방식은 동기 함수와 동일하다. 다만 function 키워드 앞에 비동기 함수임을 알리는 async 키워드를 둔다. 이러한 이유로 AsyncFunction 객체는 별도의 생성자가 필요없고 Function 객체의 생성자를 사용하고 있다. 또한 동기 함수에서 선언식과 표현식 함수 구현 방식이 있듯이 비동기 함수도 마찬가지로 선언식과 표현식 함수를 구현할 수 있다. 중요한 것은 function 키워드 앞에 async 키워드를 두는 것 뿐이다. 그리고 암시적으로 항상 Promise 객체로 값을 반환해야 한다. 즉 결과를 반환시 명시적으로 Promise 객체를 사용하지 않더라도 반환되는 값을 Promise 객체로 감싸 resolve()을 실행한 것으로 만든다.

비동기 함수 생성 방식
// Function 객체의 생성자를 사용
const AsyncFunction = async function() { }.constructor;
const demo = new AsyncFunction();

// 선언식
async function demo() {

}

// 표현식
const demo = async function() {

}

위의 예에서 생성자가 아닌 방식을 모두 표현식(expressoin) 생성이라고 부른다. 자세한 내용은 aync function expression을 참고한다. 어떠한 방식이든 모든 비동기 함수는 실제로 AsyncFunction 객체이다.

AsyncFunction() 생성자에 의해 생성된 비동기 함수는 실제로 함수가 만들어질 때 분석된다. 다시 말해서 일반 함수 구현 방식처럼 코드 상에서 함수(선언식, 표현식) 형식으로 존재하는 것과 달리 필요에 따라 런타임 상황에서 생성이 된다는 뜻이다. 

참고로 객체의 생성자를 사용한 비동기 함수 구현은 표현식(expression) 비동기 함수 구현 방식보다 좀 더 복잡하므로 상황에 따라 사용할 필요가 있을 것 같다.

한편 AsyncFunction 객체는 전역(globals) 객체가 아니며 Functoin 객체와의 유사성으로 생성자를 독특한 방식으로 가져온다. 생성자에 대한 자세한 사항은 Constructor를 참고한다.

실행 환경에서 글로벌 스코프(global scope)를 나타내는 Window 전역 객체와 다른 ECMAScript에서 전역적인 객체를 의미한다. 일반적으로 내장된 객체는 모두 전역 객체로 분류되지만 그렇지 않은 것도 있다.

예제

(1) 비동기 함수가 Promise 객체를 사용해서 값을 반환
(2) 반환하는 값이 Promise 객체가 아닌 경우

명시적으로 Promise 객체를 사용하지 않더라도 반환되는 값을 Promise 객체로 감싸 resolve()을 실행한 것으로 반환한다.

하위 트리 탐색

  • Constructor

    AsyncFunction 객체는 은닉된 객체이며 전역 객체가 아니다. 그리고 직접적인 생성자 함수를 가지고 있지 않다. 따라서 아래 구문처럼 Function 전역 객체의 생성자를 사용한다.

    • AsyncFunction()

      비동기 함수를 생성하는 생성자 함수이다. 하지만 기본적으로 Function 객체의 생성자와 동일하므로 자세한 사항은 Functoin 객체의 생성자 함수를 참고한다.

  • [[Prototype]]

    이 객체 또는 인터페이스는 상속가능한 속성과 메소드를 가지고 있지 않으며 상속된 속성과 메소드를 사용한다.

    상속된 멤버 보기

버전 명세

ECMAScript 2024(15th Edition)
#sec-async-function-objects

지원 웹브라우저