CNode

es6简易generator 使用

分享
Jjoney-pinkman发布于11 年前最后回复11 年前3 回复4826 浏览0 收藏

不废话 直接上码

var fs = require('fs');
var co = require('co');
var bluebird = require('bluebird');
var path = require('path');

bluebird.promisifyAll(fs);

co((function* (dir){
    var stat = yield fs.statAsync(dir);
    if(!stat.isDirectory()){
        throw new Error('${dir} is not a directory');
    }
    var files = yield fs.readdirAsync(dir);
    for(var file of files){
        stat = yield fs.statAsync(path.join(dir,file));
        if(stat.isDirectory()){
            (yield fs.readdirAsync(path.join(dir,file))).forEach((item) =>{
                files.push(path.join(file,item));
            });
        }
    }
    return files;

})('your/dir')).then( (files) =>{
    console.log(files);
}).catch((e)=>{
    console.error(e);
})

这个一个读取文件夹一下所有文件的一个小程序, 由于直接使用了co,加上bluebird对fs的promise封装,异步写法简直太high了!!! 话说node --harmony至今都没有支持let,class,而iojs竟然还不支持箭头函数,深深的怨念啊。。。

查看回复

回复 (3)

C
captainblue2013#1·11 年前

你调用Async系了,还yield?

D
DavidCai1993#2·11 年前

io.js支持胖箭头函数,加上参数 --harmony_arrow_functions 便可 自豪地采用 CNodeJS ionic

参与回复
登录后即可参与回复。登录