2013-12-20 68 views
1

我是新來nodejs.i需要做兩個任務series.I使用異步模塊與異步系列控制流混淆

var async = require('async'); 
async.series([ 
    function() { 
     console.log("step 1"); 
    }, function() { 
     console.log('step 2'); 
    }]); 

console.log("end"); 

我希望得到的結果是

step 1 
step 2 
end 

但結果是

step 1 
end 

爲什麼?

回答

5

每個函數都是異步的,所以它傳遞了一個回調函數。爲了進入下一步,您需要調用回調。

var async = require('async'); 
async.series([ 
    function (callback) { 
     console.log("step 1"); 
     callback(); 
    }, 
    function (callback) { 
     console.log('step 2'); 
     callback(); 
    } 
]); 

console.log("end"); 

注意,這會做你想要什麼,但你的end仍處於一個奇怪的地方。系列回調實際上並不是異步的,所以一切都會同步運行。如果它全部是異步運行的,你的結束回調將會在某個地方運行。真的,它應該在最後回調。

例如

var async = require('async'); 
async.series([ 
    function (callback) { 
     console.log("step 1"); 
     setTimeout(callback, 100); 
    }, 
    function (callback) { 
     console.log('step 2'); 
     setTimeout(callback, 100); 
    } 
], function(err){ 
    console.log("end"); 
}); 
+0

感謝您的回答。你介意進一步解釋你爲什麼使用'setTimeout'?是不是'async.series'應該等待每個函數已經結束? –

+0

@JohnPoe這只是一個例子。 'async.series'的目標是在每個前一個完成之後運行一組異步函數。在這種情況下,我添加了setTimeout來使該功能異步,否則該示例根本不需要使用'async.series'。 – loganfsmyth