2016-10-17 3 views
0

async.waterfall을 사용하고 있는데 다음과 같이하고 싶습니다.Nodejs Async Waterfall, 다른 흐름 제어?

무언가를 반환하여 async.waterfall의 결과를 유지하는 것은 Promise를 좋아합니다. 그래서 저는 그 두 부분을 나눌 수 있습니다.

function Action1(){ 

    return async.waterfall([ 
     function step1(callback){ 
      ... 
      callback(null, data); 
     }, 
     function step2(data, callback){ 
      ... 
      callback(null, data); 
     }, 
     function step3(data, callback){ 
      ... 
      callback(null, data); 
     } 
    ]); 
} 


Action1().then(function(result){ 
    // obtain the final result here 
}); 

그러나, 내가 찾을 수있는 것은 : 최종 콜백은 인수로 폭포 기능에 주입 할 수있다.

async.waterfall([ 
    function(callback) { 
     ... 
     callback(null, data); 
    }, 
    function(data, callback) { 
     ... 
     callback(null, data); 
    }, 
    function(data, callback) { 
     ... 
     callback(null, data); 
    } 
], function (err, result) { 

    // final callback 
    ... 
}); 

기대되는 프로그래밍 구조를 달성하기 위해 나에게 제안이 있습니까? 또는 async 이외의 다른 선택 사항이이 패턴을 허용합니까?

답변

0

당신은 아마 블루 버드에 가야합니다. 이 같은

async 코드 :

async.waterfall([ 
    function(callback) { 
     callback(null, 'one', 'two'); 
    }, 
    function(arg1, arg2, callback) { 
     // arg1 now equals 'one' and arg2 now equals 'two' 
     callback(null, 'three'); 
    }, 
    function(arg1, callback) { 
     // arg1 now equals 'three' 
     callback(null, 'done'); 
    } 
], function (err, result) { 
    // result now equals 'done' 
}); 

은 (Blubird 사용)과 같이 쓸 수있다 : 자세한 정보를 원하시면 당신은 http://bluebirdjs.com/docs/coming-from-other-libraries.html#coming-from-async-module을 참조 할 수 있습니다

Promise.resolve(['one', 'two']).spread(function(arg1, arg2) { 
    // arg1 now equals 'one' and arg2 now equals 'two' 
    return 'three'; 
}).then(function(arg1) { 
    // arg1 now equals 'three' 
    return 'done'; 
}).then(function(result) { 
    // result now equals 'done' 
}); 

.

+0

각 단계에서 비동기 함수를 호출해야합니다. 그러나'약속'은'계속'돌아갈 필요가있다. – user3711105

+0

@ user3711105 문서를 참조하십시오. 거기에 설명되어 있습니다. –