GRAMMAR

Editing
  • account_tree
  • bug_report

Thenable

자바스크립트는 Promise 객체가 나오기 전부터 Thenable 객체라는 개념으로 비동기 처리를 지원했다. Promise 객체가 나오면서 절대적인 존재감은 아니지만 그래도 필요에 따라 현재도 사용되고 있다. 중요한 것은 Promise 구현과 상호 작동이 가능하다는 것이다.

Thenable은 이름에서 의미하듯이 then이라는 것을 사용할 수 있다는 의미를 갖는다. 다시 말해서 then 이름을 갖는 메소드가 구성된 객체를 나타낸다. 단순히 이름만 then으로 되어 있다고 해서 "thenable"이라고 하지 않는다. then() 메소드는 두 개의 콜백 함수가 지정(최소 한 개)되어야 한다. 성공과 실패하는 경우에 동작하는 두 개의 콜백 함수를 지정하는 것이다.

여기까지 보면 마치 Promise 객체의 then() 메소드와 동일하다. 사실 Thenable 객체(실제 객체 이름이 아닌 then() 메소드가 존재하는 객체)는 Promise 객체가 나오기 전부터 존재했던 비동기 구현 방식이다. 하지만 복잡한 코드 구조를 갖게 되는 문제를 가지고 있어 가독성이 매우 떨어졌다. 이것을 개선하고자 표준 객체로 등장한 것이 Promise 객체이다. 그러니 Promise 객체는 Thenable 객체에 속한다고 볼 수 있다. 하지만 모든 Thenable 객체들이 모두 Promise 유형은 아니다. Thenable 객체는 분류적인 측면이고 많은 다양한 Thenable 객체들이 사용자에 의해서 구현될 수 있다.

다음은 Thenable 객체의 한 예이다.

await thenable 코드에서 해당 객체를 비동기적(async)으로 호출할 때 then 메소드가 있다면 then 메소드를 호출한다. then() 메소드에서 성공했을 때 실행할 콜백 함수를 지정했고 실행되면 콜백 함수의 인수가 결과값으로 반환된다.