async.parallel和async.series有什么区别?

时间:2014-08-28 10:49:38

标签: node.js asynchronous

第一个模拟php - 函数在js中休眠:

 function sleep(seconds) {
    var startTime = new Date().getTime();
    while (new Date().getTime() < startTime + seconds*1000);
  }

然后我的例子:

var async = require('async');

var a = function(callback)
{   
    sleep(10)
    console.log("Hello ");
    callback(null,'vals1')
   // return 'prop' 
};
var b = function(callback)
{  
    //I want get  return 'prop'  from a() its posible ?
    sleep(30)
    console.log("World");
     callback(null,"vals2")
};

var c = function(callback)
{  
    //I want get  return 'prop'  from a() its posible ?
    sleep(2)
    console.log(" and U");
     callback(null,"val3")
};
async.parallel(
[
    a,b,c
],function(err,vals){

    //console.log(err)//undefined
    console.log(vals) //[val1,vals2]
    console.log('finals')
}
    );

series(tasks, [callback])

在tasks数组中运行函数,每个函数在前一个函数完成后运行。如果系列中的任何函数将错误传递给其回调,则不再运行任何函数,并立即使用错误值调用回调。否则,当任务完成时,回调会收到一系列结果。

parallel(tasks, [callback])

并行运行tasks函数数组,无需等到上一个函数完成。如果任何函数将错误传递给其回调,则会立即使用错误值调用主回调。任务完成后,结果将作为数组传递给最终回调。

我的结果:

break about 10sec 
Hello 

break about 30sec 
World 

and small break
and U 

我希望按以下顺序执行这些功能:

output immediately 
and U 

break about 10sec 
Hello 

break about 30sec 
World 

如果甚至在

上替换你的例子
async.series()

结果将是相同的

1 个答案:

答案 0 :(得分:1)

要回答您的问题:parallel并行运行这些功能,series一个接一个地运行。

您的代码无法按预期工作,因为nodejs只为所有函数提供一个进程,而您的函数执行“忙等待”。将它们替换为setTimeout(),即可获得预期结果...