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.
});
Run Code Online (Sandbox Code Playgroud)
和
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);
});
Run Code Online (Sandbox Code Playgroud)
我没有看到差异.也许我的样本不好?我在github async存储库上阅读了关于这两个函数的文档,你可以找到async.parallel函数:
如果任何函数将错误传递给其回调,则会立即使用错误值调用主回调
async.parallel中的主要回调是什么?
Ama*_*dan 35
async.series连续调用你的函数(在开始下一个之前等待前面的每个函数完成).async.parallel将同时启动它们(或者无论如何在单线程的土地上同时启动它们).
主回调是在调用中可选择提供的回调async.parallel或async.series(签名是async.parallel(tasks, [callback]))
那么实际发生的是:
parallel 启动所有任务,然后等待[ , "Two"])["One", "Two"])undefined结果是(现在结果["One", "Two", undefined])parallel 注意到错误,立即返回到目前为止收到的结果series解雇第一项任务; 它会安排超时.series等到200ms之后调用回调,然后添加结果.(结果现在["One"])series解雇第二项任务; 它会安排超时.series等待直到100ms后调用回调,然后添加结果.(结果现在["One", "Two"])series解雇第三项任务; 它会安排超时.series等到400ms之后调用回调,然后添加结果并因错误退出.(结果现在["One", "Two", undefined])您得到相同结果的事实是由于您依赖setTimeout于您的任务.
至于如何parallel有用,尝试下载一百个网页parallel; 然后做同样的事情series.走着瞧吧.
正如您在文档中看到的那样:
串行运行一系列函数,每个函数在前一个函数完成后运行.
这意味着async会在调用"n + 1"之前等待"n"函数结束.
并行运行一系列函数,无需等到上一个函数完成.
但是你的代码太简单了,看不出差异.如果它们都适合你,你应该选择async.parallel它更快.
| 归档时间: |
|
| 查看次数: |
10056 次 |
| 最近记录: |