node.js async.series是如何工作的?

var async = require('async'); function callbackhandler(err, results) { console.log('It came back with this ' + results); } function takes5Seconds(callback) { console.log('Starting 5 second task'); setTimeout( function() { console.log('Just finshed 5 seconds'); callback(null, 'five'); }, 5000); } function takes2Seconds(callback) { console.log('Starting 2 second task'); setTimeout( function() { console.log('Just finshed 2 seconds'); callback(null, 'two'); }, 2000); } async.series([takes2Seconds(callbackhandler), takes5Seconds(callbackhandler)], function(err, results){ console.log('Result of the whole run is ' + results); }) 

输出如下所示:

 Starting 2 second task Starting 5 second task Just finshed 2 seconds It came back with this two Just finshed 5 seconds It came back with this five 

我期待take2Second函数在take5Second开始之前完全完成。 这是如何工作的。 请告诉我。 最终的function永远不会运行。 谢谢。

不完全的。 您正在执行函数(只要数组被计算),这就是为什么他们似乎在同一时间开始。

传递给每个要执行的函数的callback在asynchronous库内部。 一旦你的函数完成,你就执行它,传递一个错误和/或一个值。 你不需要自己定义这个函数。

最终的函数从来不会在你的情况下运行,因为asynchronous需要你调用的callback函数转移到系列中的下一个函数从来没有真正得到执行(只有你的callbackHandler函数被执行)。

试试这个:

 async.series([ takes2Seconds, takes5seconds ], function (err, results) { // Here, results is an array of the value from each function console.log(results); // outputs: ['two', 'five'] }); 

James给了你一个关于async.series的很好的概述。 请注意,您可以在系列数组中设置匿名函数,然后使用参数调用您的实际函数

 var async = require('async') var param1 = 'foobar' function withParams(param1, callback) { console.log('withParams function called') console.log(param1) callback() } function withoutParams(callback) { console.log('withoutParams function called') callback() } async.series([ function(callback) { withParams(param1, callback) }, withoutParams ], function(err) { console.log('all functions complete') }) 

我创buildasynchronous系列的首选方法是使用操作数组,如下所示:

 var async = require('async'), operations = []; operations.push(takes2Seconds); operations.push(takes5seconds); async.series(operations, function (err, results) { // results[1] // results[2] }); function takes2Seconds(callback) { callback(null, results); } function takes5seconds(callback) { callback(null, results); } 
 async.series ([ function (callback) { response=wsCall.post(user,url,method,response); console.log("one"); callback(); } , function (callback) { console.log("two"); //console.log(response); callback(); } ] , function(err) { console.log('Both a and b are saved now'); console.log(response); }); 

async.series ,所有函数都是串行执行的,每个函数的合并输出都被传递给最终的callback函数。 例如

 var async = require('async'); async.series([ function (callback) { console.log('First Execute..'); callback(null, 'userPersonalData'); }, function (callback) { console.log('Second Execute.. '); callback(null, 'userDependentData'); } ], function (err, result) { console.log(result); }); 

输出:

 First Execute.. Second Execute.. ['userPersonalData','userDependentData'] //result