중첩된 프로미스의 사용 사례
JavaScript의 Promise와 함수형 프로그래밍에서의 모나드 개념에 관한 논쟁과 실제 활용 사례를 다루고 있습니다.
Promise.then()은 함수형 프로그래밍의 functor(map)과 monad(flatMap) 개념을 혼합하여, 반환값이 일반 값이든 Promise이든 자동으로 중첩을 평탄화(flatten)하는데, 이는 편리하지만 함수형 타입 시스템과의 호환성에 문제를 일으킵니다.
저자는 이러한 설계가 대부분의 경우 편리하지만, 비동기 동시성 제어를 구현할 때는 중첩된 Promise가 유용할 수 있음을 EscoDB 프로젝트의 읽기-쓰기 잠금(RWLock) 구현 예시를 통해 설명합니다.
특히, 중첩 Promise를 명시적으로 유지함으로써 여러 비동기 작업의 실행 순서를 제어하고, 동시에 실행 가능한 작업과 순차 실행 작업을 구분하는 복잡한 동시성 로직을 정확히 구현할 수 있음을 강조합니다.
결론적으로, Promise의 암묵적 평탄화는 일반적인 비동기 처리에 적합하지만, 고급 동시성 관리에서는 중첩 Promise를 통한 명시적 제어가 필요할 수 있음을 시사합니다.