es6简易generator 使用
发布于 9 年前 作者 joney-pinkman 4027 次浏览 最后一次编辑是 8 年前 来自 分享

不废话 直接上码

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 回复

你调用Async系了,还yield?

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

@DavidCai1993 恩 ,确实可用,thx

回到顶部