是应该如何工作的

是应该如何工作的

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

我原以为takes2Second函数会在takes5Second开始之前完全完成。
那是应该如何工作的。请告诉我。
最后的功能永远不会运行。谢谢。

最佳答案

不完全的。您正在立即执行功能(对数组求值后立即执行),这就是它们似乎同时启动的原因。

传递给要执行的每个函数的回调在异步库内部。您可以在函数完成后执行它,并传递错误和/或值来执行它。您无需自己定义该功能。

最终函数永远不会运行,因为异步需要您调用的回调函数才能继续执行该系列中的下一个函数(实际上,您的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']
});

07-24 22:25