2017-02-01 67 views
0

我使用異步系列運行2個功能takes2Seconds和功能takes5Seconds。爲什麼最終的回調沒有顯示任何結果呢?最終回調沒有表現出任何結果

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

看起來你是push荷蘭國際集團2個未定義值operations

運行時async.seriesoperations數組需要包含callback作爲參數的函數。

當你做operations.push(takes2Seconds(1, function() {}));要調用的函數takes2Seconds直去,因爲在takes2Seconds功能無return聲明,它是push荷蘭國際集團undefined到操作陣列。

下面,我添加了一個return聲明到您的takesXSeconds功能。現在,它們返回函數callback作爲參數,返回的功能得到被推到operations陣列。

我也從takesXSeconds刪除callback PARAM,因爲它不需要在這一點上。

現在,當運行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,結果)心不是夠長了回來?爲什麼你犯了一個returninf功能,並通過回調作爲參數,最後叫裏面的回調? –

0

先執行你的take2Seconds函數然後執行函數take5秒。

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); 
    } 
相關問題