Minified.js는 웹 개발을 위한 경량 JavaScript 라이브러리로, Promises/A+ 사양을 완전히 준수하는 Promise 구현을 제공한다. 이 구현은 크기가 작고 성능이 우수하며, 다른 Promise 기반 라이브러리와도 원활하게 상호작용할 수 있다.
주요 특징
- Promises/A+ 완전 호환: 표준을 따르므로 ES6 Promise, jQuery Deferred 등과 함께 사용 가능
- 경량화: 전체 라이브러리가 작고 Promise 모듈 자체도 매우 간결
- 직관적인 API:
then(),error()등의 메서드로 간편한 비동기 처리 - 오류 전파 지원: 체인 중간에서 발생한 예외를 말단에서 통합 처리 가능
- Promise 취소 기능:
stop()메서드로 실행 중인 비동기 작업 중단 가능
기본 사용법
Promise 인스턴스는 _.promise()로 생성하며, fire() 메서드로 상태를 결정한다:
const p = _.promise();
setTimeout(() => {
p.fire(true, ['성공 데이터']);
}, 1000);
p.then(result => {
console.log('완료:', result);
}).error(err => {
console.error('실패:', err);
});
다중 Promise 병렬 처리
여러 Promise를 동시에 실행하고 모두 완료될 때까지 기다릴 수 있다:
const userReq = $.request('get', '/api/user');
const productReq = $.request('get', '/api/products');
_.promise(userReq, productReq).then((user, products) => {
renderPage(user, products);
});
체이닝과 오류 처리
Promise 체인 내부에서 발생한 모든 오류는 마지막 error() 핸들러로 전달된다:
fetchData()
.then(parseData)
.then(validateData)
.then(saveData)
.error(e => {
// 위 단계 중 어느 하나에서 실패해도 여기서 처리
showErrorMessage(e);
});
비동기 작업 취소
Minified.js는 Promise에 stop() 메서드를 제공하여 실행 중인 작업을 중단할 수 있다:
const anim = el.animate({$opacity: 0}, 500);
cancelBtn.on('click', anim.stop); // 애니메이션 즉시 중지
다른 Promise 구현과의 비교
| 기능 | Minified.js | ES6 Promise | jQuery Deferred |
|---|---|---|---|
| Promises/A+ 호환 | ✅ 완전 지원 | ✅ 완전 지원 | ⚠️ 부분적 |
| 작업 취소 | ✅ stop() |
❌ 미지원 | ✅ .abort() |
| 라이브러리 크기 | 매우 작음 | 내장 (크기 없음) | 크고 무거움 |
권장 사용 패턴
- 항상
error()또는then(onFulfilled, onRejected)로 오류를 처리할 것 - 독립적인 비동기 작업은 병렬로 실행 (
_.promise(p1, p2, ...)) - 불필요한 중첩보다는 체이닝을 선호할 것
- 더 이상 필요 없는 Promise 참조는 해제하여 메모리 누수 방지
Minified.js의 Promise 구현은 작은 프로젝트부터 대규모 애플리케이션까지 다양한 환경에서 효율적인 비동기 제어를 가능하게 한다. 특히 브라우저 호환성이 중요한 레거시 환경에서도 안정적으로 동작한다.