2013-12-20 45 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