nodeJs基础教程系列(9)——CO库
co 库用于优化异步函数调用方式,支持promise和thunks方式。
CO库
co
库用于优化异步函数调用方式,支持promise和thunks方式。
安装
npm i co thunkify
thunkify 库是对异步函数的再次封装,符合co规范。
使用例子
不采用co的代码:fuck
var fs = require("fs");
fs.readdir(".",function(err,rs){
fs.readFile(rs[0],function(err,f1){
console.log(f1);
fs.readFile(rs[1],function(err,f2){
console.log(f2);
fs.readFile(rs[2],function(err,f3){
console.log(f3);
})
})
})
})
这段代码的意思是,查看当前目录下有多少文件,然后逐个读取,把读取的数据打印到终端,可笑的是,你还必须要知道到底有几个文件,如果我知道有3个,就调用三次 readFile异步函数,如果1000个,那就要......
下面用co库实现任意文件数:
var fs = require("fs");
var co = require("co");
var thunkify = require("thunkify");
// 包装异步函数,让其符合co规范。
var readdir = thunkify(fs.readdir);
var readFile = thunkify(fs.readFile);
co(function *(){
// 得到当前目录下的文件名列表
var fns = yield readdir(".");
for(var i=0,len = fns.length;i<len;i++){
var rs= yield readFile(fns[i]);
console.log(rs);
}
})();
我们会发现,co使用很简单, 只要用thunkify转换普通的异步函数,之后和同步调用基本一致。
下面我们自己编写一个,模拟异步的函数,并用co执行。
var co = require("co");
var thunkify = require("thunkify");
function fun(time,callback){
setTimeout(function(){
callback(null,"setTimeout time is - "+time);
},time)
}
var func = thunkify(fun);
co(function* (){
console.log(yield func(2000));
console.log(yield func(1000));
console.log(yield func(500));
})()
结果:
setTimeout time is - 2000
setTimeout time is - 1000
setTimeout time is - 500
根据结果,确实是按照顺序执行的,cool !
值得注意的是,在编写异步函数的回调函数时,要遵循function(err,arg0,args1 … )
的方式,co还支持其他方式,这里不一一介绍,请参看 https://github.com/visionmedia/co 。有任何问题,可使用提问系统,在线提问。
很赞哦! ( 0
)
- Prev one
nodeJs基础教程系列(4)——CommonJS规范
CommonJS是服务器端模块的规范,Node.js采用了这个规范。yellow根据CommonJS规范,一个单独的文件就是一个模块。加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象。下面就是一个简单的模块文件example.js。
- Next one
nodeJs基础教程系列(8)——流
这部分的内容并不实用,这是真的,我们不太可能去自己实现流子类,而是去使用流的子类,比如 fs 、net、http等I/O相关的模块就是流的子类,这部分内容又很重要。通过对流理解,在使用具体子类时才能得心应手。