async笔记(二)——process
来源:互联网 发布:matlab智能算法 温正 编辑:程序博客网 时间:2024/06/04 20:01
本文总结下async库里关于流程控制的部分
async库在:async github
示例代码在:Async Example
series
一组函数顺序执行,这个API很常用。当一个步骤完成时,调用callback(),不传递参数;如果其中一个步骤出错,则调用callback(err),后续的步骤就不会继续执行。每个步骤执行的结果,会汇总到最终callback的results参数中
async.series([function(callback){ console.log("first task"); callback(null, 1);}, function(callback){ console.log("second task"); callback({message:"some error"}, 2);// callback with a error parameter}, function(callback){ console.log("third task");// not called callback(null, 3);}],function(error, results){ if(error){ console.error("error happend: " + error); } console.log(results);// [1, 2]});
parallel
基本上和series一样,包括API的参数,区别在于,series是顺序执行,而parallel是同时执行
async.parallel([function(callback){ callback(null, 1);}, function(callback){ callback({message:"error"}, null);}, function(callback){ callback(null, 3);}], function(error, results){ if(error){ console.error(error.message); } console.log(results);});
whilst和until
重复执行一个函数,直到test function的值为false或true。类似的还有doWhilst和doUntil
var count = 0;async.whilst( function () { return count < 5; }, function (callback) { console.log("call once"); count++; setTimeout(callback, 1000); }, function (err) { if(err){ console.log("error: " + err); } console.log("whilst done"); });
var count3 = 0;async.until(function(){ return (count3 > 5);}, function(callback){ count3 ++; setTimeout(callback, 1000);}, function(error){ console.log("until done"); count3 = 0;});
forever
循环执行一个函数,直到抛出错误
async.forever(function(callback){ setTimeout(function(){ console.log("forever..."); console.log(flag); flag ++; if(flag > 5){ callback({message:"hehe"}); }else{ callback(); } }, 1000);}, function(err){ // once this callback be called, the "forever" stops if(err){ console.error("there is an error"); }});
waterfall
这个可能是async库中最重要的一个方法,可以解决callback嵌套的问题。上一个流程的执行结果,会传给下一个流程的参数。如果其中一个流程出错,则会中止后续流程的执行,直接调用最终的callback。否则最后一个流程的结果,会传递给最终callback
async.waterfall([function(callback){ callback(null, "kyfxbl", 29);}, function(name, age, callback){ console.log(name);// kyfxbl console.log(age);// 29 callback(null, 10000, 200);}, function(salary, bonus, callback){ console.log(salary);// 10000 console.log(bonus);// 200 callback(null, [1, 2, 3]);}], function(err, results){ console.log(results);// [1, 2, 3]});
compose
可以将几个function组合成function,这个方法不是很常用
// f(g(h(n)))async.compose(function(n, callback){ setTimeout(function(){ callback(null, n + 1); }, 10);}, function(n, callback){ setTimeout(function(){ callback(null, n * 3); },10);})(4, function(err, result){ console.log("compose result: " + result);// 13});
queue
创建一个执行任务的队列,类似oc中的NSOperationQueue,好像用得不多
var q = async.queue(function(task, callback){ console.log("hello " + task.name); callback(null);}, 3);q.push({name:"kyfxbl"}, function(err){ console.log("done");});q.push({name:"liting"}, function(err){ console.log("finish");})
nextTick
node里其实已经有nextTick方法,这个方法是为了统一node和浏览器环境的行为,在浏览器环境,实际调用的是setTimeout(func, 0)函数
var order = [];async.nextTick(function(){ order.push(222);});order.push(111);process.nextTick(function(){ console.log(order);// [111, 222]});
times
重复执行函数n次,并收集最终结果
async.times(5, function(n, next){ console.log("n: " + n); next(null, n * 2);}, function(err, results){ console.log(results);// [0, 2, 4, 6, 8]});
总结
最重要的是series,parallel,waterfall方法
0 0
- async笔记(二)——process
- async笔记(一)——collections
- ES6 —(async 函数)
- Async流程控制(二)
- Process Creation(二)
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
- AngularJS2 学习笔记——Async Data Binding
- C#学习笔记(二):异步编程之async和await
- async.js 学习教程(二)
- android-async-http源码解读(二)
- ECMAScript 6 学习(二)async函数
- 从零开始学_JavaScript_系列(59)——async函数
- Android的多线程——Handler和Async Task学习笔记
- SpringBoot集成篇(二) 异步调用Async
- PSAPI—Enumerate Process
- RUP(Rational Unified Process)笔记整理
- process migration(进程迁移) 学习笔记
- 报数游戏(2)--【英雄会】
- hdu 1113 Word Amalgamation
- pig安装
- C++学习随笔
- (七)装饰模式
- async笔记(二)——process
- Linux で *.lzh
- MFC程序运行机制
- 关于水星mw305R路由器无法设置转发规则,无法ddns的解决办法
- 学习总结 20140130 除夕
- uva 11536 - Smallest Sub-Array(Towpointer)
- Android:Layout_weight的深刻理解
- <MEMORY>Project Euler NO45
- PAT 1014 Waiting in Line