async.series和async.parallel的区别

async.series和async.parallel有什么区别? 考虑下面的例子,我得到了同样的结果。

async.parallel([ function(callback){ setTimeout(function(){ callback(null, 'one'); }, 200); }, function(callback){ setTimeout(function(){ callback(null, 'two'); }, 100); }, function(callback){ setTimeout(function(){ var err = new Error('I am the error'); callback(err); }, 400); }, function(callback){ setTimeout(function(){ callback(null, 'three'); }, 600); }, ], // optional callback function(err, results){ if(err){ console.log('Error'); } else { } console.log(results); //results is now equal to [ 'one', 'two', undefined ] // the second function had a shorter timeout. }); 

 async.series([ function(callback){ setTimeout(function(){ callback(null, 'one'); }, 200); }, function(callback){ setTimeout(function(){ callback(null, 'two'); }, 100); }, function(callback){ setTimeout(function(){ var err = new Error('I am the error'); callback(err); }, 400); }, function(callback){ setTimeout(function(){ callback(null, 'three'); }, 600); } ], // optional callback function(err, results){ //results is now equal to [ 'one', 'two', undefined ] if(err){ console.log('Error'); } else { } console.log(results); }); 

我没有看到差异。 也许是我的样品不好? 我在github的asynchronous库里看了关于这两个函数的文档,可以findasync.parallel函数:

如果任何函数将错误传递给它的callback函数,主callback函数会立即调用错误的值

async.parallel中的主要callback是什么?

async.series连续地调用你的函数(等待每个之前完成,然后开始下一个)。 async.parallel将同时启动它们(或者任何通过单线程同时进行的通道)。

主要的callback函数是在调用async.parallelasync.seriesselect提供的(签名是async.parallel(tasks, [callback])

那么究竟发生了什么呢?

平行:

  • parallel启动所有任务,然后等待
  • 所有四项任务都安排超时
  • 超时100次火灾,增加结果(结果现在是[ , "Two"]
  • 超时200次火灾,增加结果(结果现在是["One", "Two"]
  • 超时400发生火灾,返回错误并且undefined为结果(结果现在是["One", "Two", undefined]
  • parallel通知一个错误,立即返回到目前为止收到的结果
  • 超时600次火灾,但没有人关心返回结果

系列:

  • series火灾的第一项任务; 它安排超时。
  • series等待直到callback被称为200ms以后,然后加上结果。 (结果现在是["One"]
  • series火灾的第二项任务; 它安排超时。
  • series等待直到callback被称为100ms以后,然后加上结果。 (结果现在是["One", "Two"]
  • series火灾的第三项任务; 它安排超时。
  • series等待直到回叫被称为400ms以后,然后加上结果并由于错误而退出。 (结果现在是["One", "Two", undefined]
  • 第四个任务永远不会执行,并且它的超时从不计划。

事实上,你得到的结果是相同的,因为你在任务中依赖setTimeout

至于如何有用地使用parallel ,试着下载一百个parallel网页; 然后用series做同样的事情。 走着瞧吧。

正如你可以在文档中看到的:

  • 对于async.series:

运行一系列串联的函数,每个函数在前一个函数完成后运行。

这意味着在调用“n + 1”之前,asynchronous将等待“n”函数结束。

  • 对于async.parallel

并行运行一组函数,而不必等到上一个函数完成。

但是你的代码太简单了,看不出有什么不同。 如果他们都为你工作,你应该selectasync.parallel它更快。