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.parallel
或async.series
select提供的(签名是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它更快。