빠른 참조

Q.js Promise 치트시트

Q.js 빠른 참조 가이드: Node.js 및 브라우저를 위한 역사적인 Promise 라이브러리, nfcall을 통한 콜백 변환, 배열 결합자.

· 게시일

[!NOTE] 역사적 라이브러리 안내: Q는 네이티브 ES2015 Promise와 async/await가 JavaScript 엔진에 표준화되기 전 기초가 되었던 주요 Promises/A+ 구현체입니다.

Q는 Node.js와 브라우저 환경을 위해 개발된 프로미스 라이브러리입니다.

프로미스 생성

const Q = require('q');

function asyncAction() {
  const deferred = Q.defer();

  fs.readFile('data.txt', 'utf8', (err, data) => {
    if (err) deferred.reject(err);
    else deferred.resolve(data);
  });

  return deferred.promise;
}

Nodeback(Node.js 콜백) 변환

Q는 표준 Node 콜백 서명인 (err, result)를 프로미스로 변환하는 유틸리티를 제공합니다:

const fs = require('fs');

// Q.nfcall: Node 스타일 함수를 직접 호출하여 프로미스 반환
Q.nfcall(fs.readFile, 'file.txt', 'utf-8')
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

// Q.denodeify: 콜백 함수를 프로미스 반환 함수로 래핑
const readFile = Q.denodeify(fs.readFile);
readFile('file.txt', 'utf-8').then(console.log);

배열 결합자 (Combinators)

// Q.all: 모든 프로미스가 성공적으로 이행될 때까지 대기
Q.all([stepA(), stepB()])
  .then(([resA, resB]) => {
    console.log(resA, resB);
  });

// Q.allSettled: 성공 여부와 관계없이 모든 프로미스가 완료될 때까지 대기
Q.allSettled([stepA(), stepB()])
  .then((results) => {
    results.forEach((r) => {
      if (r.state === 'fulfilled') console.log(r.value);
      else console.error(r.reason);
    });
  });

참고자료

관련 주제