javascript - node.js async.series 是它应该如何工作的?

标签 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() { 
        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']
});

关于javascript - node.js async.series 是它应该如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969082/

相关文章:

javascript - 通过命名管道在 bash 和 JavaScript 之间传递消息

javascript - 即使值存在,属性也会返回未定义…?

javascript - grunt-contrib-watch 看不到新文件

javascript - Node.js 只使用数组中的最后一项

C# 在读取异步时等待 shell 命令返回

Javascript 原型(prototype)什么是正确的?

javascript - jCarousel、计数器,怎么样?

node.js - 清除 NodeJS 流中的所有行

node.js - socket.io + 使用 'emit' 回调?

silverlight - 如何取消 Silverlight/WCF 中的异步操作?