티스토리 뷰

nodejs 에서 async을 이용한 비동기 작업 실행.

비동기 작업이 많아지면서 생기는 "callback hell" 에 대한 대응법.


설치 방법은 다음과 같다.

npm install --save async


* nodejs 가 아닌 웹 클라이언트에서도 사용할 수 있음.

<script type="text/javascript" src="async.js"></script>
<script type="text/javascript">

    async.map(data, asyncProcess, function(err, results) {
        alert(results);
    });

</script>


여러가지 비동기 호출에 편리한 기능을 제공하며, 기능 중 일부.

1. waterfall

var task = [
  function(callback){
    callback(null, 1, 2);
  },
  function(arg1, arg2, callback){
    callback(null, 1);
  },
  function(arg1, callback){
    callback(null, 1);
  }
]

async.waterfall(task, function (err, result)
{
	if (err) console.log("에러가 발생해 실행이 중간에 종료됨");
	else console.log(result);
});


async.waterfall(TASK_LIST, FINAL_CALLBACK)

task 의 첫번째 작업부터 시작. 각 함수는 반드시 콜백을 호출해야 하며, 콜백이 2번 이상 호출되지 않도록 주의.

콜백의 첫 번째 인자에는 에러 값이 들어가며, null 이 아니라면 바로 FINAL_CALLBACK 이 호출된다.

null 이라면 다음 함수로 실행이 넘어가게 됨. 이때 콜백에서 두번째부터 넣어준 인자값이 첫번째부터 오며, 콜백은 맨 마지막 인자로 옴.

* 추가 데이터 인자를 쓰지 않아도 됨. 


2. until


var max = 10;
var idx = 0;

async.until(
    function () {
        // if flag == true -> end!
        var flag = idx < max;
        if (!flag) console.log('finish');
        return flag
    },
    function (cb) {
        console.log(idx.toString());
        idx++;
        cb(null)
    },

    function(err) { console.err("we encountered an error", err); }
)


async.until(TEST_CALLBACK, JOB_CALLBACK, ERR_CALLBACK)

첫번째 함수에서 콜백을 호출하지 않고 특정 값을 반환하는데, true가 될 때까지 계속 작업 함수(두번째) 를 실행한다.

이때 null 이 아닌 값이 콜백 인자로 호출되면 바로 세번째 함수가 호출된다.

waterfall 과는 다르게 until은 비동기 작업이 끝날 때 실행되는 콜백이 없으므로, 첫번째 함수에서 flag 를 체크해 대응해야 함.



3. whilst

async.until 과 모든 것이 동일하며, 첫번째 함수의 return 값이 false 가 될 때까지 계속 작업 함수를 실행.

(while 문과 같이 생각하면 됨.)

'Web > nodejs' 카테고리의 다른 글

security mods  (0) 2017.01.09
npm 으로 패키지 설치 시 에러 해결법  (0) 2016.12.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함