node.js에서 async 를 쓰는 이유는 콜백사용으로 인해 중첩되는 함수들을 줄이기 위해서 라고 알고 있는데....


그중에서 가장 많이 쓰는게 waterfall 을 많이 쓰는거 같아 일단 정리 해본다.


waterfall<T, E>(tasks: Function[], callback?: AsyncResultCallback<T, E | Error>): void;


함수 구조는 위와 같이 되어있다.

tasks는 대괄호 안에 순서대로 처리할 function을 넣어야 하고

AsyncResultCallback 위에 task function에서 에러가 나거나 마지막 함수를 처리 할때

들어오는 함수로 보면 될꺼 같다.


tasks에 선언하는 function의 인자값은 callback을 사용 하며 이것을 이용하여 다음 function으로 이동 하거나 에러를 보내서 AsyncResultCallback함수에 에러 값을 보내기도 한다.

callback을 함수로 사용 하면 첫번째 인자는 error 값을 보내게 되어있고 두번째 인자 부터는 다음 task에 전달할려고 하는 값을 넣을 수 있다.


일단 waterfall을 왜 써야하는지를 간단하게 보기 위해 아래와 같은 샘플 코드를 작성 해보았다



코드를 간단하게 설명하면 test.txt 파일을 읽어서 test_async.txt 파일로 쓰기를 하는 코드이다.

일단 test.txt 파일을 읽고 callback으로 파일을 제대로 읽었는지 확인후에

test_async.txt 파일을 쓰기를 하고 그 결과를 callback 으로 확인 하는 로직이다.

콜백 중첩이 2단계 정도라 보기 편하지만 점점 중첩 단계가 많아진다면 보기가 힘들어질것이다

그래서 async의 waterfall 로 처리한 코드 아래와 같이 작성하였다.



중첩되는 괄호가 없어서 보기는 편해졌다..

코드가 생략된 부분이 있어서 조금 풀어서 보면 아래와 같이 작성 된다.



2번째 사진처럼 구조를 알고 있다면 심플하게 작성하는것도 나쁘진 않지만.

코드는 명확하게 하는게 작업할때 더 좋다 그래서 3번째 처럼 작성 하는것을 추천함.


자세한 설명은 아래 정식 문서를 참조하기 바람..

https://caolan.github.io/async/docs.html#waterfall


by 널부러 2018. 8. 8. 18:17