2015년 3월 3일 화요일

[async.js] 막강한 flow 제어 - async.waterfall, async.series, async.parallel, async.auto

async.js는 callback이 너무 많아지는 javascript의 문제점을 해결할 수 있는 package이다. async.js를 사용하면 javascript asynchronous programming을 훨씬 용이하고 직관적으로 할 수 있다.

Learning node.js 책에 나와 있는 내용을 참고하여 이해를 해보자.

아래의 코드를 보면 javascript 코드에서 asynchronous task가 연속적으로 수행되는 경우 코딩도 쉽지 않고, 이해도 쉽지 않음을 알 수 있다.


async.waterfall
위처럼 asynchronous task가 순차적으로 실행되어야 하는 경우 async.waterfall이 사용된다.



async.series
async.series는 async.waterfall과 유사하면서도 약간 다르다. function의 결과는 다음 function의 argument로 passing되지 않는다. 대신 마지막에 호출되는 callback의 두번째 argument인 array에 추가된다. 즉, 각 function의 결과는 array에 저장되어 마지막 callback에 넘겨진다.

위 코드의 결과는 다음과 같다.
{ numbers: [ 1, 2, 3 ], strings: [ 'a', 'b', 'c' ] }

async.parallel
async.parallel은 위의 async.waterfall이나 async.series와 달리 병렬적으로 실행되는 task의 flow를 제어한다.

아래의 코드를 보면 이해가 쉬울 것이다. 병렬적으로 수행되어야 할 task들이 실행되고, 마지막에 반드시 callback이 실행된다.


위 코드의 결과는 다음과 같다. (위의 async.series 예제 코드와 같다)
{ numbers: [ 1, 2, 3 ], strings: [ 'a', 'b', 'c' ] }

async.auto
async.auto는 asynchronous flow control을 맘대로 할 수 있는 일종의 끝판왕이다.

병렬, 직렬 처리를 유연하게 할 수 있다는 장점이 있다.

이 코드의 결과는 다음과 같다.
{ numbers: [ 1, 2, 3 ], strings: [ 'a', 'b', 'c' ], assemble: { numbers: '1, 2, 3', strings: '\'a\', \'b\', \'c\'' } }

추가 참고 사이트
https://github.com/caolan/async

댓글 없음: