2017-02-01 4 views
0

2 개의 함수 takes2Secondstakes5Seconds을 실행하는 데 비동기 시리즈를 사용하고 있습니다. 최종 콜백 결과가 표시되지 않는 이유는 무엇입니까?최종 콜백에 결과가 표시되지 않습니다.

var async = require('async'), 
operations = []; 

operations.push(takes2Seconds(1,function(){})); 
operations.push(takes5seconds(2,function(){})); 

async.series(operations, function (err, results) { 
if(err){return err;} 
console.log(results); 
}); 



function takes2Seconds(a,callback) { 

    results='Took 2 sec'+a; 
    callback(null, results); 
} 

function takes5seconds(b,callback) { 
    results='Took 5sec'+b; 
    callback(null, results); 
} 

답변

0

는 것 같습니다.

async.series을 실행할 때 operations 배열에는 매개 변수로 callback의 기능이 있어야합니다.

당신이 똑바로 멀리 takes2Seconds 함수를 호출되고, takes2Seconds 기능에는 return 문이 없기 때문에, 그것은 push가 운영 배열에 undefined을 보내고있다 operations.push(takes2Seconds(1, function() {}));을한다.

아래에서 필자는 takesXSeconds 함수에 return 문을 추가했습니다. 이제 그들은 callback 함수를 매개 변수로 반환하고 반환 된 함수는 operations 배열로 푸시됩니다.

이 시점에서 필요하지 않으므로 takesXSeconds에서 callback 매개 변수도 제거했습니다.

이제 async.series(...)을 실행하면 takesXSeconds에서 반환 한 각 함수가 호출됩니다.

var async = require('async'), 
    operations = []; 

operations.push(takes2Seconds(1)); 
operations.push(takes5seconds(2)); 

async.series(operations, function (err, results) { 
if(err){return err;} 
console.log(results); 
}); 

function takes2Seconds(a) { 
    var results='Took 2 sec'+a; 

    return function(callback) { 
     callback(null, results); 
    } 
} 

function takes5seconds(b) { 
    var results='Took 5sec'+b; 

    return function(callback) { 
     callback(null, results); 
    } 
} 
+0

정교한 설명을 부탁드립니다. –

+0

@aryankanwar 설명을 추가했습니다. 바라기를 이것은 설명한다. 추가 도움이 필요하면 알려주세요. – AnthW

+0

콜백 (null, result)을 쓸 때 충분하지 않습니까? 왜 returninf 함수를 만들고 콜백을 인수로 전달한 다음 마침내 콜백을 콜백 했습니까? –

0

먼저 takes2Seconds 함수가 실행되고 나서 함수가 실행됩니다. 약 5 초가 실행됩니다. 당신이 pushoperations에이 개 정의되지 않은 값을 보내고있는 것처럼

var takes2Seconds = function (a, callback) {//first this function executed 
     results = 'Took 2 sec' + a; 
     callback(null, results); 
    }; 
    async.eachSeries(takes2Seconds, takes5seconds, function (err) { 
     if (err) { 
      res.json({status: 0, msg: "OOPS! How is this possible?"}); 
     } 
     res.json("Series Processing Done"); 
    }) 
    var takes5seconds = function (b, callback) { // second this function executed 
     results = 'Took 5sec' + b; 
     callback(null, results); 
    } 
관련 문제