Javascript node.js async.series是这样工作的吗?

Javascript node.js async.series是这样工作的吗?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,输出如下所示: 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() {

输出如下所示:

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);
}) 
我希望Takes2秒函数在Takes5秒开始之前完全完成。 这就是它的工作原理。请让我知道。
最后一个函数永远不会运行。谢谢

不完全是。您正在立即执行这些函数(只要对数组求值),这就是它们同时启动的原因

传递给要执行的每个函数的回调是异步库的内部回调。一旦函数完成,就可以执行它,并传递错误和/或值。你不需要自己定义这个函数

在您的案例中,最后一个函数永远不会运行,因为async需要您调用以转到系列中的下一个函数的回调函数从未实际执行过(只有
callbackHandler
函数才会执行)

请尝试以下方法:

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

James向您介绍了
async.series
。请注意,您可以在series数组中设置匿名函数,然后使用参数调用实际函数

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

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

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')
})

async.series
中,所有函数都以串联方式执行,每个函数的合并输出被传递到最终回调。e、 g

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);
    });
输出:

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);
});

詹姆斯,谢谢你对这件事的清楚解释。在我按照建议做了这些更改之后,它就可以工作了。是否可以将参数传递给这些函数?在进一步阅读文档时,看起来我应该使用async.apply将参数传递给函数。Noah,是的,我最终发现了这一点。不管怎样,谢谢你的发帖。欢迎来到SO,谢谢你的回答。如果格式正确并稍加解释,这个答案会有用得多。并不是说您的帮助不受欢迎,而是因为它的质量问题,您的答案可能会被删除,这对您或社区中的任何人都没有好处。您如何将.series()函数放在前面很有趣。我有点喜欢这样。
async.series
如何知道其中一个操作遇到错误?如何执行此异步序列?
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