【问题标题】:What's the difference between async.parallel and async.series?async.parallel 和 async.series 有什么区别?
【发布时间】:2014-10-22 04:59:45
【问题描述】:

第一个模拟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()

结果是一样的

【问题讨论】:

标签: node.js asynchronous


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 2015-07-25
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    相关资源
    最近更新 更多