sitelink1 https://youtu.be/PNtsOqW4wnE 
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  

javascript의 비동기 동작에서 일련의 과정을 트랜잭션으로 묶어서 처리하기 위해 콜백을 연속해서 사용하게 되는데 다음과 같이 설계할 수 있다

 

function task1(callback) {

    console.log('Task1 시작');

    setTimeout(function () {

        console.log('Task1 끝');

        callback();

    }, 300);

}

 

function task2(callback) {

    console.log('Task2 시작');

    setTimeout(function () {

        console.log('Task2 끝');

        callback();

    }, 200);

}

 

task1(function () {

    task2(function () {});

});

 

그리고 이러한 콜백이 심화하게 되면 콜백 지옥을 만나게 된다

 

task1(a, b, function (err, result1) {

    task2(c, function (err, result2) {

        task3(d, e, f, function (result3) {

            task4(h, i, function (result4) {

                // 비동기 동작

            });

            task4

        }); // task3

    }); // task2

}); // task1

 

이를 해결하기 위해 Async 와 Promise를 이용한다

 

Async

비동기 동작의 흐름을 제어하기 위한 외부 모듈

 

설치

  > npm install async

 

기능

  행위 순서 제어

    series : 순차 실행

series(tasks, [callback])

  async.series(

    [

      //태스크1

      function(callback) {

        //태스트 성공

        callback(null, result);

 

        //테스트 실패

        callback(err, null); //다음 태스크는 실행하지 않는다

      },

      태스크2,

      태스크3

   ],

 

   function(err, results) {

    if ( err ) {

      // 태스크 진행 중 에러 : callback(err, null)

      return;

    }

    // 마무리 동작

   }

);

 

    seriesEach

    parallels

    waterfall

  콜렉션(배열, 객체)

    each

    forEachOf

    map

    filter