본문 바로가기
NodeJs

Node.js 디자인패턴, Promisification

by pretzel1 2023. 11. 30.

 

* Promisification

: 콜백 기반 함수의 일부 특성을 알고있을 경우, 콜백 기반함수를 프라미스를 반환하는 동일한 함수로 변환할 수 있다.

: 일부 고급 시나리오에서는 생성자를 사용하여 수동으로 프라미스를 생성해야 할 필요가 있기도 하다.

 

1) 지원하는 예

- fs 모듈의 promises 객체를 사용하면, fs API의 프라미스화된 버전을 사용할 수 있음

- superagent는 promise를 지원함

return superagent.get(url)
	.then((res) => {
    		content = res.text;
            return mkdirpPromises(dirname(filename))
     })
     .then(() => fsPromises.writeFile(filename, content))....

 

 

2) 프라미스의 순차반복 패턴

- 루프를 사용하여 동적으로 프라미스 체인을 구축 -> 사실 잘 이해가 안간다...

function spiderLinks(currentUrl, content, nesting){
	let promise = Promise.resolve() //정의되지 않은 빈 프라미스 정의, 체인의 시작점
    if (nesting === 0){
    	return promise
    }
    const links = getPageLinks(currentUrl, content);
    for(const link of links){
    	promise = promise.then(() => spider(link, nesting - 1))
        // 체인의 이전 promise에서 then을 호출하여 얻은 새로운 프라미스로 promise 변수 갱신함
        // promise 비동기 반복패턴
    }
    
    return promise
 }

댓글